有时候听有些朋友抱怨.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++;
         }
 }
 }