代码之家  ›  专栏  ›  技术社区  ›  Ahmed Hassan

基于datatable在每行中使用不同的数据绑定radiogroup

  •  0
  • Ahmed Hassan  · 技术社区  · 7 年前

    我添加了两列gridcontrol,第1列表示来自datatable的string和bind,另一列表示radiogroupitem,但我想根据问题在每一行中添加不同的单选按钮值,就像第一行add中一样 (好-不好)和下一行添加(此处-不在此)和最后一行添加(尚未-是-今晚)

    //bind question column
    DataTable dtt = new DataTable();
    
    dtt.Columns.Add("ID", typeof(string));
    
    dtt.Rows.Add("How are you ?");
    dtt.Rows.Add("Where are you ?");
    dtt.Rows.Add("are you sleepy ?");
    
    gridControl1.DataSource = dtt;
    
    gridControl1.ForceInitialize();
    
    // Bind radiobuttonitem
    DataTable dataSource = new DataTable();
    dataSource.Columns.Add("TypeID", typeof(int));
    dataSource.Columns.Add("TypeName", typeof(string));
    
    dataSource.Rows.Add(new object[] { 1, "A" });
    dataSource.Rows.Add(new object[] { 2, "B" });
    dataSource.Rows.Add(new object[] { 3, "C" });
    
    foreach (DataRow dr in dataSource.Rows)
       repositoryItemRadioGroup1.Items
            .Add(new DevExpress.XtraEditors.Controls.RadioGroupItem(dr["TypeID"], dr["TypeName"].ToString()));
    

    https://imgur.com/a/25Ofu

    1 回复  |  直到 7 年前
        1
  •  1
  •   DmitryG    7 年前

    使用 CustomRowCellEdit 事件将不同的编辑器分配给各个单元格。您可以在字典中存储问题和RepositoryItemRadioGroup:

    Dictionary<string, RepositoryItemRadioGroup> repositories = new Dictionary<string, RepositoryItemRadioGroup>();
    
    RepositoryItemRadioGroup group1 = new RepositoryItemRadioGroup();
    group1.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem("Fine", "Fine"));
    group1.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem("Bad", "Bad"));
    repositories.Add("How are you?", group1);
    
    RepositoryItemRadioGroup group2 = new RepositoryItemRadioGroup();
    group2.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem("Here", "Here"));
    group2.Items.Add(new DevExpress.XtraEditors.Controls.RadioGroupItem("There", "There"));
    repositories.Add("Where are you?", group2);
    

    在CustomRowCellEdit事件处理程序中,调用 GetRowCellValue 方法获取问题,从字典中获取相应的存储库项,并设置e.RepositoryItem参数:

    void GridView1_CustomRowCellEdit(object sender, DevExpress.XtraGrid.Views.Grid.CustomRowCellEditEventArgs e) {
        GridView view = sender as GridView;
        if (e.Column.FieldName == "Answer" && view.IsValidRowHandle(e.RowHandle)) {
            string question = (string)view.GetRowCellValue(e.RowHandle, "Question");
            RepositoryItemRadioGroup item;
            if(repositories.TryGetValue(question, out item))
                e.RepositoryItem = item;
        }
    }
    

    另请参见: Modify and Validate Cell Values