[ADO.NET][WinForm] 限制 DataGridView 輸入字元
最近在工作上常使用DataGridView操作,未來將這些操作整理起來,以便以後參考使用,限制字元在UI應用上相當的普遍,有時我們要限制使用者只能輸入數字,這時我們需要用到ASCII,這時有兩種方法,一種是使用查表法,上網找就一堆資料了;另一種則是使用 Encoding.ASCII 屬性,本篇將使用查表法的方式來取得字元的ACSII Code。
接下來我們來實作吧,首先當然要有DataGridView控制項,再來加入編輯儲存格事件 EditingControlShowing
再來資料繫結一下
private void Form1_Load(object sender, EventArgs e)
{
DataTable table = new DataTable();
string[] fields = new string[] {"ID","Name","Phone" };
foreach (var item in fields)
{
DataColumn column = new DataColumn();
column.Caption = item;
column.ColumnName = item;
table.Columns.Add(column);
}
DataRow row = table.NewRow() ;
row["ID"] = "1";
row["Name"] = "余小章";
row["Phone"] = "0806449";
table.Rows.Add(row);
dataGridView1.DataSource = table;
}
我們來觀察一下當在編輯DataGridView時的事件
被我看到TextBox了,真high!
然後我們就把 DataGridViewEditingControlShowingEventArgs 轉型成 TextBox,並註冊KeyPress事件
private void dataGridView1_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
TextBox tb = (TextBox)e.Control;
tb.KeyPress += new KeyPressEventHandler(tb_KeyPress);
}
void tb_KeyPress(object sender, KeyPressEventArgs e)
{
char key = e.KeyChar;
int value = (int)key;
if ((value >= 48 && value <= 57) || value == 46 || value == 8 || value == 43 || value == 45)
e.Handled = false;
else
e.Handled = true;
}
如此一來我們便可限制DataGridView可輸入的字元了!
PS,至於上面的value是代表什麼意思就得查表了。
儲存格編輯完成後再使用CellEndEdit事件來檢查輸入的項目是否符合規則,若不符合規則可以使用 DataGridViewCell.ErrorText 來提醒使用者
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
DataGridView view = (DataGridView)sender;
if (e.RowIndex == view.RowCount - 1)
return;
//Debug.WriteLine(e.ToString());
string value = "";
float data = 0;
switch (e.ColumnIndex)
{
case 0:
value = view.CurrentCell.Value.ToString();
if (value == "")
{
view.CurrentCell.ErrorText = "不能為空";
break;
}
break;
}
}
若有謬誤,煩請告知,新手發帖請多包涵
Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET