从sql表绑定数据后,无法添加行

时间:2014-09-05 18:06:08

标签: c#

对不起,我正在努力解决这个问题,我已经尝试了这里列出的所有解决方案,但都没有奏效。我是C#的新手,我需要你的帮助, 我让人们扫描要在datagridview控件中输入的项目。使用下面的代码我搜索DVG的值,然后根据值是否存在添加新的dvg行。

public void InnerLoadData()
{
     if (textBox1.Text != string.Empty)
     {
         textBox1.DataBindings.Clear();
         textBox2.DataBindings.Clear();
         ScanID.DataBindings.Clear();
         CardNumber.DataBindings.Clear();
         Boolean result = true;

         string searchValue = ScanID.Text;
         dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
         foreach (DataGridViewRow row in dataGridView1.Rows)
         { 
             if ( row!=null && 
                row.Cells [3].Value != null && 
                row.Cells[3].Value.ToString() .Equals +(searchValue) && 
                row.Cells [4].Value.ToString()=="OUT" && 
                dataGridView1 !=null  )
             {
                 row.Selected = true;
                 row.SetValues(textBox1.Text, 
                     textBox2.Text,
                     CardNumber.Text,
                     ScanID.Text, 
                    "IN",
                     DateTime .Now );
                 row.DefaultCellStyle.BackColorColor.Green ;                           
                 result = false;
                 break ;
              }
         }

         if (result !=false )
         {                                  
             this.dataGridView1.Rows.Add(textBox1.Text, 
                textBox2.Text,
                CardNumber.Text,
                ScanID.Text, 
                "OUT",
                DateTime.Now); **// got error here**
             this.dataGridView1.RowsDefaultCellStyle.BackColor = Color.Red ;                                       
         }
     }
 }

这是我的问题,

我将所有datagridview数据保存到FormClosing上的sql表中,以防万一, 当我从sql重新加载数据并尝试添加新的datagridview行时,我收到了上面的消息。 知道怎么解决吗?谢谢。

private void reloadToolStripMenuItem_Click(object sender, EventArgs e)
{
    BindingSource bsdata1 = new BindingSource();
    dataGridView1 .AutoGenerateColumns = false;
    dataGridView1 .AutoGenerateColumns = false;
    //DataGridView1.DataSource = Nothing
    using (SqlCommand cmd = new SqlCommand("get_badge", _econnect))
    {  cmd.CommandType = CommandType.StoredProcedure;
        SqlDataAdapter ad = new SqlDataAdapter(cmd);
        ad.Fill(dt1);
        bsdata1.DataSource = dt1;
    dataGridView1 .DataSource  =  bsdata1 ;     
}
}}}}

1 个答案:

答案 0 :(得分:3)

当DataGrid已绑定到dataTable时,您无法向DataGrid添加行。

您应该将数据添加到DataTable本身。

dataGrid.DataSource属性获取DataTable(或者更好地将其存储在某处),使用DataTable.NewRow方法创建具有相同模式的新行,设置其DataRow.ItemsArray属性和add it到同一个DataTable。

if (result !=false )
{     
     DataTable dt =  (DataTable)this.dataGridView1.DataSource;

     DataRow row = dt.NewRow();

     row.ItemsArray = new Object[]
     {
         textBox1.Text, 
         textBox2.Text,
         CardNumber.Text,
         ScanID.Text, 
         "OUT",
         DateTime.Now
     };

     dt.Rows.Add(row);                                      
 }

修改

可能只有两个地方NullReferenceException可能会出现这样的修改 - this.dataGridView1.DataSource未设置或CardNumber(ScanID)为空(如果它们当然不是静态的,总是在表单控件上)。

通过初始化这些控件来修复第二种情况(如果是这种情况) 第一种情况:

1。在表单初始化时加载dataTable - 将reloadToolStripMenuItem_Click调用放在表单构造函数的末尾。

2。或者在没有DataSource的情况下不添加任何内容:

if ((result != false) && 
    (this.dataGridView1.DataSource != null))
{  
     DataRow row = ...

3. 如果您确实需要将项目添加到空的非绑定DataGridView中,那么您将必须使用一些虚拟DataTable(或其他DataSource)并将其与{{1}上加载的DataTable合并}。