vs2003,winform中,已经通过重载写出了datagrid中的combobox列,现在需要实现帮定数据 到combobox的DisplayMember,显示ValueMember属性中的文字,并且在数据修改提交时,将DisplayMember中的数据提交出去。因为在datagrid上榜定的datatable,使用适配器的update方法更新到数据库,一直没有实现,各位提供思路,多谢

解决方案 »

  1.   

    http://blog.csdn.net/califord/archive/2006/03/03/614439.aspx
    不知道这个对你有没有用
      

  2.   

    to 已经通过重载写出了datagrid中的combobox列既然已经重写了,那么重载combobox列不就是普通的combobox,只不过外边加了一个壳而已,以前怎么绑定的,现在用同样的方法进行绑定,有什么区别呢。
      

  3.   

    datagrid上榜定的datatable
    更新就不需要了adapter了
    用command吧
    简单易行
      

  4.   

    通过重载写出了datagrid中的combobox列你在combobox列的值改变以后,改变原来的值,应该可以吧?
      

  5.   

    你可以参看
    http://www.syncfusion.com/FAQ/WindowsForms/FAQ_c44c.aspx#q480q
      

  6.   

    我碰到的问题解决了,从DataGridColumnStyle继承。使用适配器可以update
      

  7.   

    凡是网上能找到的例子我都看过了,都是重载了DataGridTextColumn,也就是说,到了datagrid中,与数据源相关的就是页面上显示的文字,虽然后台有绑定数据,但是这个数据与数据源是没有关系的,现在想把后台数据与数据源相关联,而前台显示对应的文字,一直不得法,或者功力还不够,希望哪位高手帮下忙
      

  8.   

    this.Drop_CalendarSYR.Items.Clear();
    this.Drop_CalendarSYR.DisplayMember = "Value";
    this.Drop_CalendarSYR.ValueMember ="Key";
    if(r_Dto.CalendarSYRList.Rows.Count>0)
    {
    foreach(CalendarMConfirmDisplayInfoDto.CalendarSYRListRow Row in this.r_Dto.CalendarSYRList)
    {
    DictionaryEntry de = new DictionaryEntry(Row.CalendarSYRKBN,Row.CalendarSYRK);
    this.Drop_CalendarSYR.Items.Add(de);
    }
    }
      

  9.   

    Dto.DatatableRow Row = Dto.NewDatatableRow()
    if(this.Drop_CalendarSYR.SelectIndex >-1)
    {
    DictionaryEntry de = (DictionaryEntry )this.Drop_CalendarSYR.SelectItems;
    Row.value = (string)de.value;
    Dto.DatatableRow.Add(Row);
    }
      

  10.   

    不知道楼主用哪种方式重载的;曾经在触发datagrid的事件时把combobox定位、并且显示出来,combobox的值是通过一个sql-select绑定上去的,combobox的selectindexchange事件再把当前datagrid格的值赋成combobox的value;这时combobox就脱离datagrid了,再更新数据库就比较容易了
      

  11.   

    你可以不用考虑combobox是什么,你既然重写了它就是属于datagrid,直接用dataView 或dataSource直接绑定就行。
    给段代码 仅供参考不知道适不适合你
    DataGridTableStyle ts1 = new DataGridTableStyle();
    ts1.MappingName="grp_sln";
    // Set other properties.
    //ts1.AlternatingBackColor = Color.LightGray;
    //
    // Add 2 cols with textbox column style
    DataGridTextBoxColumn TextCol = new DataGridTextBoxColumn();


    TextCol.MappingName="zbh";
    TextCol.HeaderText="小组编号";
    TextCol.Width=100;
    ts1.GridColumnStyles.Add(TextCol);
    TextCol.ReadOnly=true; TextCol = new DataGridTextBoxColumn();
    TextCol.MappingName = "zmc";
    TextCol.HeaderText = "小组名称";
    TextCol.Width = 100;
    ts1.GridColumnStyles.Add(TextCol);
                TextCol.ReadOnly=true;
    // Step 2 - Use the combo column style 
    // Add 1 col with combo style
    DataGridComboBoxColumn ComboTextCol = new DataGridComboBoxColumn(new ComboValueChanged(MyComboValueChanged));
    ComboTextCol.MappingName = "hpzbh";
    ComboTextCol.HeaderText = "选择互评小组编号";
    ComboTextCol.Width = 140;
    ComboTextCol.NullText="";
    ts1.GridColumnStyles.Add(ComboTextCol); // Step 3 - Additional setup for Combo style
    // a) make the row height a little larger to handle minimum combo height
    ts1.PreferredRowHeight = ComboTextCol.ColumnComboBox.Height + 1;
    // b) Populate the combobox somehow. It is a normal combobox, so whatever...

    ComboTextCol.ColumnComboBox.Items.Clear();
    if(LevelOfNode(this.treeView5.SelectedNode)==2)
    {
    foreach(DataRow dr in ds.Tables["grp_sln"].Select("bh='"+this.treeView5.SelectedNode.Tag.ToString().Trim()+"'"))
    {
    ComboTextCol.ColumnComboBox.Items.Add(dr["zbh"]);
    }
    }

    // c) set the dropdown style of the combo...
    ComboTextCol.ColumnComboBox.DropDownStyle = ComboBoxStyle.DropDownList; //add the custom table style to the datagrid table styles
    dataGrid3.TableStyles.Add(ts1);
    //dataGrid3.TableStyles.Remove(ts1);
      

  12.   

    你只要保证combox改变的时候该行的RowState为Modified就行了
      

  13.   

    应该和普通的update方法使用是一样的嘛
      

  14.   

    多用隐藏列算了,把VALUE保留在WIDTH=0的列里面然后逐条更新...我从没在页面上用ADAPTER,页面直接和数据库打交道,想想都可怕
      

  15.   

    说习惯了,不是页面是FORM我也是封装了一个自己的DATAGRID
      

  16.   

    我的方法:
    private void GetFocus(int row,int col)
      {
       ///先把焦点移动到DataGrid
        this.dgdFunctionArea.Focus(); 
       ///把焦点移动到DataGridCell
        DataGridCell dgc = new DataGridCell(row,col); 
        this.dgdFunctionArea.CurrentCell = dgc; 
        DataGridTextBoxColumn dgtb = (DataGridTextBoxColumn)dgdFunctionArea.TableStyles[0].GridColumnStyles[col];    ///设置焦点    dgtb.TextBox.Focus();
      } 
    private void cmbFunctionArea_SelectionChangeCommitted(object sender, EventArgs e)
    {
      this.dgdFunctionArea[this.dgdFunctionArea.CurrentCell] = ((ComboBox)sender).SelectedValue.ToString();

    }
    private void AddCustomDataTableStyle()
    {
    DataGridTableStyle ts1 = new DataGridTableStyle();
    ts1.MappingName = "rebate";

    ts1.AlternatingBackColor = Color.LightGray;
    DataGridTextBoxColumn TextCol = new DataGridTextBoxColumn(); ComboBox cmbFunctionArea = new ComboBox();
    strCon = "SELECT STR(STORE_NO) + ' ' + STOREID AS STOREID,STORE_NO FROM t_b_STORE";
    SqlDataAdapter dac = new SqlDataAdapter(strCon, strConns);
    DataSet dsc = new DataSet();
    dac.Fill(dsc,"store");
    cmbFunctionArea.DataSource = dsc ;
    cmbFunctionArea.DisplayMember = "store.STOREID";
    cmbFunctionArea.ValueMember = "store.STORE_NO";
    cmbFunctionArea.Cursor = Cursors.Arrow;
        cmbFunctionArea.DropDownStyle= ComboBoxStyle.DropDownList;
        cmbFunctionArea.Dock = DockStyle.Fill;
    cmbFunctionArea.SelectionChangeCommitted += new EventHandler(cmbFunctionArea_SelectionChangeCommitted); 
    TextCol.TextBox.Controls.Add(cmbFunctionArea); 
    TextCol.MappingName = "STORE_NO";
    TextCol.HeaderText = "STORE_NO";
    TextCol.Width = 120;
    ts1.GridColumnStyles.Add(TextCol);
    }