我有一个XtraGrid GridControl,它定义了3列,2个数据绑定,还有一个我设置为RepositoryItemComboBox
。该列的设置如下:
this.gridColumn3.Caption = "Test";
this.gridColumn3.FieldName = "test";
this.gridColumn3.Name = "gridColumn3";
this.gridColumn3.UnboundType = DevExpress.Data.UnboundColumnType.String;
this.gridColumn3.Visible = true;
this.gridColumn3.VisibleIndex = 2;
创建RepositoryItemComboBox
,如:
RepositoryItemComboBox cbo = new RepositoryItemComboBox();
cbo.Items.Add("1");
cbo.Items.Add("2");
cbo.Items.Add("3");
cbo.Items.Add("4");
cbo.Items.Add("5");
cbo.Items.Add("6");
cbo.Items.Add("7");
gridView1.Columns[3].ColumnEdit = cbo;
查看网格时,combobox
会完全按照我的要求显示。此问题是在尝试检索combobox
中选择的值时。当按下网格外的button
时,应处理combobox
值。我使用以下代码:
for (int i = 0; i < gridView1.DataRowCount; i++)
{
int ID = (int)gridView1.GetRowCellValue(i, "id");
string Test = gridView1.GetRowCellValue(i, "test").ToString();
ProcessCombo(ID, Test);
}
在上面的代码ID
按预期检索,但gridView1.GetRowCellValue(i, "test")
返回null
。我有什么可能错过的?这甚至是解决这个问题的正确方法吗?
答案 0 :(得分:0)
ComboBox
编辑器才存在。因此,ComboBox
在您激活它时会被创建,并在您离开时被销毁。因此,当您Button
被按下时,ComboBox
中没有GridView
。
如果您想获得ComboBox
值,则需要使用RepositoryItemComboBox
的事件或编辑GridView
的事件。指向编辑器的链接存储在sender
事件的RepositoryItemComboBox
参数和GridView.ActiveEditor
属性中。您可以使用ComboBox.EditValue
属性或使用GridView.EditingValue
属性获得ComboBox
的值。您也可以使用EventArgs
GridView
编辑活动的ValidatedEditor
参数获取价值,例如CellValueChanging
,CellValueChanged
,private void RepositoryItemComboBox1_Closed(object sender, ClosedEventArgs e)
{
//Get the value from sender:
var comboBox = (ComboBoxEdit)sender;
object value = comboBox.EditValue;
//Get the value from active editor:
object activeEditorValue = gridView1.ActiveEditor.EditValue;
//Get the value from editing value:
object editingValue = gridView1.EditingValue;
}
。
例如:
private Dictionary<int, string> _comboBoxValues = new Dictionary<int, string>();
private void gridView1_CustomUnboundColumnData(object sender, CustomColumnDataEventArgs e)
{
if (e.Column.FieldName != "test")
return;
int id = (int)gridView1.GetListSourceRowCellValue(e.ListSourceRowIndex, "id");
if (e.IsSetData)
_comboBoxValues[id] = (string)e.Value;
else if (e.IsGetData && _comboBoxValues.ContainsKey(id))
e.Value = _comboBoxValues[id];
}
此外,如果您想存储您的值并在以后使用它,那么您可以使用ColumnView.CustomUnboundColumnData
事件。
以下是示例:
{{1}}
答案 1 :(得分:0)
我决定将列更改为绑定字段,在填充网格时传入空字符串,现在我可以通过以下方式访问数据:
string Test = gridView1.GetRowCellValue(i, "test").ToString();
不想这样做,但它确实有效......