DataGrid使用技巧(一)-------如何屏蔽單元格輸入
2024-07-21 02:22:42
供稿:網友
有時候聽有些朋友抱怨.net的datagrid不是很好用。就我個人的體會,datagrid的功能非常強大,可以使我們隨心所欲的完成各種各樣的工作,可惜就是實現起來不夠簡單明了。我對平時經常碰到的一些問題積累了一些解決的方法,現在把它們總結一下供大家參考。 比較經常碰到的一個問題是:我們希望datagrid的某一列只能輸入特定的文本,比如:不能輸入數字。下面的例子說明如何實現這種功能。
新建一個window應用程序,加入一個datagrid和sqlconnection,連接sql數據庫northwind。
namespace windowsapplication1
{
public class form1 : system.windows.forms.form
{
private mydatagrid datagrid1;
private system.data.sqlclient.sqlconnection sqlconnection1;
//加入全局變量oldvalue,用它表示單元格原來的文本。
private string oldvalue;
private void form1_load(object sender, system.eventargs e)
{
oldvalue="";
sqldataadapter sda=new sqldataadapter("select lastname,firstname from employees",this.sqlconnection1);
dataset ds=new dataset();
sda.fill(ds,"employees");
datagridtablestyle ats=new datagridtablestyle();
ats.mappingname="employees";
datagridcolorcolumn dcs1=new datagridcolorcolumn();
dcs1.headertext="lastname";
ats.gridcolumnstyles.add(dcs1);
datagridtextboxcolumn dcs2=new datagridtextboxcolumn();
dcs2.headertext="firstname";
dcs2.mappingname="firstname";
dcs2.textbox.textchanged+=new eventhandler(datagridtextchanged);
dcs2.textbox.enter+=new eventhandler(datagridtextbox_enter);
ats.gridcolumnstyles.add(dcs2);
this.datagrid1.tablestyles.add(ats);
this.datagrid1.datasource=ds;
this.datagrid1.datamember="employees";
}
private void datagridtextbox_enter(object sender,eventargs e)
{
//當某一單元格獲得焦點時,記錄單元格的文本
oldvalue=((datagridtextboxcolumn) this.datagrid1.tablestyles[0].gridcolumnstyles[1]).textbox.text;
}
private void datagridtextchanged(object sender,eventargs e)
{
int index=0;
string str=((datagridtextboxcolumn)this.datagrid1.tablestyles[0].gridcolumnstyles[1]).textbox.text;
//當單元格的文本改變時,檢驗是否有非法字符
while(index<str.length)
{
//如果發(fā)現數字,顯示錯誤信息并將單元格還原為原內容
if (char.isdigit(str,index))
{
messagebox.show("不能輸入數字,請重新輸入");
((datagridtextboxcolumn)this.datagrid1.tablestyles[0].gridcolumnstyles[1]).textbox.text=oldvalue;
return;
}
index++;
}
}
}