DataGrid使用技巧(一)-------如何屏蔽單元格輸入
發表于:2007-06-30來源:作者:點擊數:
標簽:
有時候聽有些朋友抱怨.NET的DataGrid不是很好用。就我個人的體會,DataGrid的功能非常強大,可以使我們隨心所欲的完成各種各樣的工作,可惜就是實現起來不夠簡單明了。我對平時經常碰到的一些問題積累了一些解決的方法,現在把它們總結一下供大家參考。 比較
有時候聽有些朋友抱怨.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)
{
//如果發現數字,顯示錯誤信息并將單元格還原為原內容
if (Char.IsDigit(str,index))
{
MessageBox.Show("不能輸入數字,請重新輸入");
((DataGridTextBoxColumn)this.dataGrid1.TableStyles[0].GridColumnStyles[1]).TextBox.Text=oldValue;
return;
}
index++;
}
}
}
原文轉自:http://www.anti-gravitydesign.com