C# 将单元格属性绑定到DataBoundItem
我正在根据存储的值设置的某些属性,例如:C# 将单元格属性绑定到DataBoundItem,c#,.net,winforms,datagridview,C#,.net,Winforms,Datagridview,我正在根据存储的值设置的某些属性,例如: DataGridViewRow row; MyObject obj = row.DataBoundItem as MyObject; row.Cells["MyCell"].ReadOnly = !obj.CanBeEdited; 现在我正在滥用事件来设置这些,但问题是datagrid中显示的对象正在从另一个线程更改,我需要在不重新绘制的情况下正确设置这些属性,例如选择多个屏幕的行和编辑多个值 Q:将属性DataBoundItems绑定到单元格属性的正
DataGridViewRow row;
MyObject obj = row.DataBoundItem as MyObject;
row.Cells["MyCell"].ReadOnly = !obj.CanBeEdited;
现在我正在滥用事件来设置这些,但问题是datagrid中显示的对象正在从另一个线程更改,我需要在不重新绘制的情况下正确设置这些属性,例如选择多个屏幕的行和编辑多个值
Q:将属性DataBoundItems绑定到单元格属性的正确方法是什么
是否有一些方法可以实现类似这样的功能?两种可能的解决方案。我没有编译任何这段代码,但如果出于某种原因它没有编译,它应该非常接近工作状态 一, 钩住CellEnter事件并将单元格的ReadOnly属性设置为您当时的CanbeEded属性。例如:
void dataGrid_CellEnter(object sender, DataGridViewCellEventArgs e)
{
var obj = dataGrid.Rows[e.RowIndex].DataBoundItem;
dataGrid.CurrentRow.Cells[e.ColumnIndex].ReadOnly = !obj.CanBeEdited;
}
二,
如果由于某种原因,这不起作用,那么您唯一的其他选项将是在加载数据后循环遍历所有行和列,并以这种方式设置ReadOnly属性。您可以在datagrid的DataBindingComplete事件中运行此代码。但是,如果您的数据发生了很大的变化,那么这段代码效率不高,因此可能会减慢速度。如果您的数据只加载一次,那么这段代码应该可以正常工作
foreach (DataGridViewRow row in dataGrid.Rows)
{
if ((row.Index == -1) || (e.RowIndex == dataGrid.NewRowIndex))
{
continue; // disregard row headers and also the new row
}
var obj = row.DataBoundItem;
foreach (DataGridViewColumn col in row.Cells)
{
if (col.Index == -1)
{
continue; // disregard column headers
}
col.ReadOnly = !obj.CanBeEdited
}
}
请尝试在网格CellEnter事件处理程序中设置row.Cells[MyCell].ReadOnly:您将在某人开始之前启用或禁用编辑editing@ASh我为用户提供弹出窗口以填充每个元素的注释,其工作方式与dgv中的foreachrow类似。SelectedRows{ifrow.Cells[comment]。ReadOnly{continue;}…}cell.ReadOnly启用/禁用该单元格的编辑。我不明白你为什么还需要它来做其他事情。至于您的代码片段:dgv中的foreachDataGridViewRow行。SelectedRows{MyObject obj=row.DataBoundItem作为MyObject;if!obj.canbeedid{continue;}…}probably@Vyktor您是否试图根据DataBoundItem中的.canbeedid属性将某些行设置为只读?@jaredbaszler某些单元格,是的。