我在窗体中用datagridview来显示数据库中的数据,现在我用OleDbCommandBuilder来自动生成SQL命令,用OleDbDataAdapter.Update进行更新,现在可以实现对数据表的更新和添加,但是问题是有一个字段AA不在datagridview中显示出来但又要添加他的值到数据库中,可是自动生成的SelectCommand中没有AA这个字段,因此添加后不显示的那个字段总是默认为0,其他字段都能正常添加。我想在更新的同时赋予那个字段一个值,请问该怎么做呢?

解决方案 »

  1.   

    OleDbCommandBuilder的SelectCommand是需要自己指定的
    自动生成的是UpdateCommand~
    你把你的部分绑定代码贴出来看看
      

  2.   

    在datagridview中不显示equip_id ,但要通过他的值来判断,具体如下://这是在datagridview中显示数据的代码:
    str1 = @"select time AS 时间,kind AS 总类,cause AS 原因,underwrite AS 签名 from siren_history where equip_id =" + id + "";
    OleDbDataAdapter da1 = new OleDbDataAdapter(str1, Olecon);
    DataTable dt1 = new DataTable();
    da1.Fill(dt1);
    this.dataGridViewHisRecord.DataSource = dt1;
    这是点击按钮更新数据的代码:private DataTable DT1 = new DataTable();
    private OleDbDataAdapter DA1 = new OleDbDataAdapter();
    OleDbCommand dc1 = new OleDbCommand(str1, olecon);
    DA1.SelectCommand = dc1;
    DA1.Fill(DT1);
    dataGridViewHisRecord.DataSource = DT1;private void bt_dgv1_Click(object sender, EventArgs e)
            {
                try
                {
                    OleDbCommandBuilder dcb = new OleDbCommandBuilder(DA1);
                    dcb.QuotePrefix = "[";
                    dcb.QuoteSuffix = "]";
                    DA1.Update(DT1);
                    MessageBox.Show("更新成功!");
                }
                catch (System.Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                    return;
                }    
            }
      

  3.   

    假设我现在数据表中有3个字段:a,b,c,d。现在要在datagridview中只显示a,b,c的数据。我想通过点击按钮来更新和添加数据,使用的是:OleDbDataAdapter.Update(datatable)。功能是可以实现,但是添加的数据是a,b,c的值,而此时d字段的默认值为0,我希望是在添加完数据时,给d赋予一个固定值。我想问如何给d赋值,语句该怎么写?
      

  4.   

    我要在datagridview中直接添加a,b,c的值进行保存,顺便来增加d的值,就是这个意思
      

  5.   

    如果equip_id是主键
    SQL语句应该把equip_id读到dataTable里
    你再把equip_id那一列在datagridview里visable = false;就行~
    CommandBuilder自动生成更新语句的前提是必须要有主键
      

  6.   

    equip_id不是主键
    如果把equip_id那一列在datagridview里visable = false,在datagridview中直接添加一行数据时equip_id这个字段的值就不能直接添加了,就默认为空了。可在datagridview中显示数据时的SQL语句还要用“where equip_id=aa ”,那么这条刚添加的数据就无法显示了,因为为空啊。能不能在用OleDbDataAdapter.Update(datatable)为其他字段添加值的时候把equip_id这个字段的值,定为一个值呢?
      

  7.   

    这么说吧:在窗体1中有两个按钮A,B,窗体B中有个datagridview,点击A或者B时弹出窗体B,B中的datagridview用来显示和添加设备A和B的属性,A和B属于同种设备,使用同一个属性表,用字段equip_id来区分。现在要通过datagridview来显示和修改除equip_id外的其他字段。在显示属性信息时是要用到equip_id来判断是A的还是B的,而datagridview中又没有这个字段,添加记录时没法给equip_id赋值,而CommandBuilder又是自动生成更新语句,矛盾就在这里。不知道你们明白了没有。
      

  8.   

    LZ这种情况,equip_id看来一定要让用户去指定了~
      

  9.   

    如果程序能判断的话你就用程序判断吧~
    在equip_id那一列自动显示出来,这样就不用用户去输了~
    领导是不是都很恐怖呀?呵呵~
      

  10.   

    就按我上面的程序加点东西,能不能实现在插入其他数据的时候对equip_id这个字段直接赋值。