做了开发好多年,只知道使用dataset的基本功能!只是把dataset作为离线数据的容器,感觉这样对待dataset这么强大的空间是一种侮辱,所以决定打算使用一周的时间来彻底研究一下dataset。
首先列一下使用过程中的出现的问题吧!
第一步,把DATASET 和 DAGAGRIVE 绑定。具体代码如下
private void SETUI(DataSet ds)
{
try
{
BindingSource mybs= new BindingSource();
mybs.DataSource = ds.Tables[0].DefaultView;
dataGridView1.DataSource = mybs;
}
catch (Exception err)
{ MessageBox.Show(err.Message); }
finally
{ }
}
第二步 不修改datagrideview 中的单元格中的数据。而直接执行下边的代码。
结果是dgv中的相关列展现了“测试问题” 结果正确
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F4)
{
if (dataGridView1.CurrentRow == null)
{
return;
}
DataGridViewRow dataGridViewRow = dataGridView1.CurrentRow;
DataRow dataRow = (dataGridViewRow.DataBoundItem as DataRowView).Row;
dataRow[1] = "测试问题";
dataRow.AcceptChanges();
//label6.Text = dataGridView1.CurrentRow.Tag.ToString();
label6.Text = dataRow.RowState.ToString();
}
结果是dgv中的相关列展现了“测试问题” 结果正确
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (dataGridView1.CurrentRow == null)
{
return;
}
第四步 修改datagrideview 中的单元格中的数据。而直接执行下边的代码。
结果是dgv中的相关列展现了“测试问题”但是结果在dgv中修改的单元格还是原来的值, 结果不正确
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F4)
{
if (dataGridView1.CurrentRow == null)
{
return;
}
DataGridViewRow dataGridViewRow = dataGridView1.CurrentRow;
DataRow dataRow = (dataGridViewRow.DataBoundItem as DataRowView).Row;
dataRow[1] = "测试问题";
dataRow.AcceptChanges();
//label6.Text = dataGridView1.CurrentRow.Tag.ToString();
label6.Text = dataRow.RowState.ToString();
}
又上边的测试代码得知 纯粹在dgv中修改代码,或者直接给dataset 复制,dataset中的数据都是可以更新的。那么我又测试了下边的代码,
第五步 修改datagrideview 中的单元格中的数据。而直接执行下边的代码。
结果是dgv中的相关列展现了“测试问题”但是结果在dgv中修改的单元格还是原来的值, 结果不正确
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.F4)
{
if (dataGridView1.CurrentRow == null)
{
return;
}
DataGridViewRow dataGridViewRow = dataGridView1.CurrentRow;
DataRow dataRow = (dataGridViewRow.DataBoundItem as DataRowView).Row;
dataRow.AcceptChanges();
dataRow[1] = "测试问题";
dataRow.AcceptChanges();
//label6.Text = dataGridView1.CurrentRow.Tag.ToString();
label6.Text = dataRow.RowState.ToString();
}
通过 上边五次代码的测试得到下边的结论, 修改dataset中的数值要么通过绑定控件 ,在空间中修改数据,然后acceptchanged()方法提交到dataset中,要么通过直接修改dataset 然同通过提交Accceptchanged()更新dataset中数据。如果两者混用,那么只有直接给dataset赋值才能起作用,
那么如何解决这个矛盾啊