C# 用一个List把数据装起来,绑定到DEV控件的GridControl上,当直接通过单元格编辑数据,加一个条件只能编辑第4列和第五列的单元格,回传到List,再按下保存按钮会 getlist出来到新的GridControl上,
时间: 2024-02-11 09:06:26 浏览: 136
双击可编辑单元格的ListControl控件
好的,你的问题是如何实现将一个装有数据的List绑定到DEV控件的GridControl上,当通过单元格编辑数据时,只能编辑第4列和第5列的单元格,并将修改后的数据回传到List中。然后再按下保存按钮将List中的数据显示到另一个GridControl上。我可以给你提供一些思路和代码示例,帮助你实现这个功能。
首先,将List绑定到GridControl上可以通过以下代码实现:
```csharp
List<MyData> dataList = GetData(); // 获取装有数据的List
gridControl1.DataSource = dataList; // 将List绑定到GridControl上
```
其中,MyData是你的数据类型,GetData()是获取数据的自定义方法。
然后,如何限制只能编辑第4列和第5列的单元格呢?可以通过GridControl的ShowingEditor事件来实现,代码示例如下:
```csharp
private void gridView1_ShowingEditor(object sender, CancelEventArgs e)
{
GridView view = sender as GridView;
if (view.FocusedColumn.FieldName != "Col4" && view.FocusedColumn.FieldName != "Col5")
{
e.Cancel = true; // 取消编辑
}
}
```
其中,Col4和Col5是第4列和第5列的列名,需要根据你的实际情况进行调整。
然后,如何将通过单元格编辑的数据回传到List中呢?可以通过GridControl的CellValueChanged事件来实现,代码示例如下:
```csharp
private void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
if (e.RowHandle < 0) return; // 新增行不处理
if (e.Column.FieldName == "Col4" || e.Column.FieldName == "Col5")
{
MyData data = gridView1.GetRow(e.RowHandle) as MyData; // 获取当前行的数据对象
if (data != null)
{
// 根据列名将单元格的值赋给数据对象的属性
if (e.Column.FieldName == "Col4")
{
data.Col4 = Convert.ToInt32(e.Value);
}
else if (e.Column.FieldName == "Col5")
{
data.Col5 = Convert.ToDouble(e.Value);
}
}
}
}
```
其中,Col4和Col5是第4列和第5列的列名,需要根据你的实际情况进行调整。
最后,如何将List中的数据显示到另一个GridControl上呢?可以在保存按钮的Click事件中调用GetList方法获取List,然后将List绑定到另一个GridControl上,代码示例如下:
```csharp
private void btnSave_Click(object sender, EventArgs e)
{
List<MyData> dataList = gridControl1.DataSource as List<MyData>; // 获取绑定到GridControl的List
if (dataList != null)
{
gridControl2.DataSource = dataList; // 将List绑定到另一个GridControl上
}
}
```
以上是一个实现思路和代码示例,具体实现还需要根据你的具体需求进行调整。希望可以帮助到你!
阅读全文