【问题标题】:Devexpress gridcontrol checkboxDevexpress 网格控件复选框
【发布时间】:2013-10-21 22:14:26
【问题描述】:

您好,我在 gridcontrol(winforms dexexpress) 中的复选框有问题。我有三个列'Check','Name','Descr'。用户可以在列上应用排序,例如“名称”,然后在某行上选中复选框(“检查”)。单击行上的复选框后,我想检查项目。但是我得到了错误的行索引(它是默认排序的索引)。应用排序后获得正确索引的任何想法?问题是在其他列排序后选择了不同的复选框。 我读到了这个http://documentation.devexpress.com/#WindowsForms/CustomDocument2531,但它对我没有帮助,真的不知道该怎么做

    private void gridViewT_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
    if (e.Column.Name == "CheckColumn" && e.RowHandle > -1)
    {
        if (e.Value != null && (bool)e.Value) {
            DataRow dr = ((DataTable)gridControlT.DataSource).Rows[e.RowHandle];
            DoSomeThing(dr);
        }
    }
}

因此,e.RowHandle(表示表的索引)是在另一个旧列排序之后。 CheckColumn 是带有复选框的列,没有按另一个列排序。

【问题讨论】:

  • 不太清楚“我得到错误的行索引”是什么意思?请发布您的代码并描述您预期的行为。

标签: c# winforms checkbox devexpress gridcontrol


【解决方案1】:

这是正确的代码:

//DataRow dr = ((DataTable)gridControlT.DataSource).Rows[e.RowHandle];
DataRow dr = ((GridView)sender).GetDataRow(e.RowHandle);

行句柄获取包含已处理单元格的行的句柄(不是索引)。 行句柄定义了行在视图中的显示顺序。 此顺序会考虑应用于视图的所有排序和过滤设置

相关帮助文章:Identifying Rows and Cards

【讨论】:

  • +1 我正要发布同样的内容,你刚刚做了:) 我想有时GetDataRow 会返回DataRowView 不是吗?
  • @SriramSakthivel 我相信 ColumnView.GetRow 方法是正确的,而 ColumnView.GetDataRow 方法是错误的。来自documentation:如果数据源是 System.Data.DataTable 或 System.Data.DataView,则此方法返回 System.Data.DataRowView 对象。如果数据源是自定义项列表,则返回相应的列表项。
  • 所以投射到DataRow会失败需要检查返回值
  • @SriramSakthivel 这可能是......我相信,对于每个具体情况,最好询问 DevExpress 支持人员directly......根据我的经验,他们的答案非常快速和全面跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-07-23
  • 2011-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-19
相关资源
最近更新 更多