对不起,我正在努力解决这个问题,我已经尝试了这里列出的所有解决方案,但都没有奏效。我是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 ;
}
}}}}
答案 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合并}。