我使用RadGridView显示项目。在双击时,用户进入详细视图,在那里他可以编辑内容然后返回(两个用户控件都显示为屏幕上的选项卡,因此同时存在)。
我使用工作方法更新网格视图中的已编辑列表,而不重新加载整个gridview:
dataRow = (GridViewRowInfo)element.Data;
Worker displayedWorker = (Worker)edataRow.DataBoundItem;
Worker changedWorkerFromDataBase = GetWorkerFromDataBase(displayedWorker.WorkerNumber).FirstOrDefault();
List<Worker> tableDataSource = (List<Worker>)MyGridView.DataSource;
int indexInTableDataSource = tableDataSource.IndexOf(tableDataSource.Where(e => e.WorkerNumber == displayedWorker.WorkerNumber).First());
tableDataSource[indexInTableDataSource] = changedWorkerFromDataBase;
dataRow.InvalidateRow();
如上所述,此代码有效,但当我将IndexOf方法更改为:
时 int indexInTableDataSource = tableDataSource.IndexOf(displayedWorker);
它不再像预期的那样工作。上面的代码只运行一次,一次保存存储在MyGridView.DataSource中的对象,而dataRow.DataBoundItem中存储的对象被视为不同,导致indexOf返回-1。
这种行为让我感到非常惊讶,特别是因为第一种方法没有问题,我认为该行的dataBound项只是指向GridView数据源内部项目的指针。
因此我的问题是:可以(在更新完成后)我告诉行更新/刷新它的数据绑定项,以便它再次等于gridview中的那个(也称为同一个对象)? / p>
答案 0 :(得分:1)
首先关闭:如果启用了排序/分组,则数据源中的索引可能与radgridview中的索引不对应(请参阅Childrows vs Rows)。
我使用radgridview和detailview处理过类似的场景。
Worker
类需要实现INotifyPropertyChanged
接口。 About INotifyPropertyChanged 现在您应该可以更改Worker
课程的实例,并且应该立即在您的radgridview中选择更改。
答案 1 :(得分:0)
您的案例中的问题来自这样一个事实:对于网格的DataSource,您使用的是List,它不支持通知。如果你切换到BindingList你会很高兴。这是一个示例:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
AddGrid();
BindingList<Worker> lst = new BindingList<Worker>() { new Worker() { ID = 1, Name = "Adam" }, new Worker() { ID = 2, Name = "Eva" } };
radGridView1.DataSource = lst;
}
class Worker
{
public int ID { get; set; }
public string Name { get; set; }
}
private void radButton1_Click(object sender, EventArgs e)
{
Worker displayedWorker = (Worker)radGridView1.CurrentRow.DataBoundItem;
BindingList<Worker> tableDataSource = (BindingList<Worker>)radGridView1.DataSource;
int indexInTableDataSource = tableDataSource.IndexOf(displayedWorker);
Worker changedWorkerFromDataBase = new Worker() { ID = 1, Name = "new name" };
tableDataSource[indexInTableDataSource] = changedWorkerFromDataBase;
}
有关List和BindingList之间差异的更多信息,请访问:https://stackoverflow.com/a/2244039/298871