dataset 典型错误使用方法

来源:互联网 发布:比较好的拼图软件 编辑:程序博客网 时间:2024/05/16 15:25

做了开发好多年,只知道使用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();
        }

第二步 修改datagrideview 中的单元格中的数据。直接执行下边的代码。
结果是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赋值才能起作用,
那么如何解决这个矛盾啊

原创粉丝点击