【问题标题】:Infragistics Ultragrid How can I disable a row depending on a propertyInfragistics Ultragrid 如何根据属性禁用行
【发布时间】:2012-10-26 18:23:27
【问题描述】:

我希望根据行中的布尔同步属性禁用 Ultragrid 中的某些行。我想过两种不同的解决方案,但都没有成功。

1) 将 Sync 属性数据绑定到行的 Activation 属性。这可能吗?

2) 在网格的 InitializeRow 事件等事件中,找出 Sync 属性是什么,如果设置为 true,则禁用该行。此方法的工作原理是,如果将更多行添加到网格并随后保存网格,数据会自行重新排序,以使禁用的行不包含正确的数据。因此,我需要一种知道何时发生这种情况的方法,以便之后我可以再次检查并禁用正确的行。

private void ultraGrid1_InitializeRow(object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e)
{
    e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.AllowEdit;
    if (e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value != null && (bool)e.Row.Cells[grdBoundGrip.DisplayLayout.Bands[0].Columns["Sync"]].Value)
            e.Row.Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled;
}

【问题讨论】:

  • 能否在 InitializeRow 事件中显示代码?
  • 嗨史蒂夫,我已经添加了上面的代码,它工作正常。问题是点击保存后有一些代码会更新和更改数据项的顺序,不幸的是这不会再次触发 InitializeRow 事件。
  • InitializeRow 的文档解释说,如果您更改单个单元格的值,也应该调用此事件。所以在 save 命令之后有一些东西可以防止这个事件被触发。同样,保存命令后的代码可能会有所帮助。
  • @Jim 如果行的重新排序实际上并没有改变行中的任何值,那么预计 InitializeRow 不会触发。如果您所做的只是更改集合中的顺序并确定是否应该能够激活一行,那么我建议将属性/列添加到网格绑定到的列表项中,可用于跟踪这样 InitializeRow 将在属性更改时触发
  • 另外在保存到UltraWinGrid.Refresh后调用RefreshRow.FireInitializeRow

标签: infragistics ultrawingrid


【解决方案1】:

您也可以在自己的函数中编写它。希望以下解决方案对您有所帮助。

创建一个窗体“test”..并在该窗体中拖放一个“ultragird”,如下所示..

创建一个表单加载函数“test_Load”.. 并尝试下面的代码.. 您的同步“false”行被禁用..

   private void test_Load(object sender, EventArgs e)
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Address", typeof(string));
        dt.Columns.Add("Sync", typeof(string));
        dt.Rows.Add(new object[] {"John","United States","False" });
        dt.Rows.Add(new object[] { "Xing", "China", "True" });
        dt.Rows.Add(new object[] { "Ram", "Nepal", "True" });
        dt.Rows.Add(new object[] { "Germany", "Thomas", "False" });
        dt.Rows.Add(new object[] { "Pedrik", "Russia", "True" });

        ultraGrid1.DataSource = dt;
        ultraGrid1.DataBind();

        DisableRowsWithSyncOff(dt.Rows.Count);

    }
    private void DisableRowsWithSyncOff(int _rowcount)
    {
        for (int i = 0; i < _rowcount; i++)
        {                
            if (!Convert.ToBoolean(ultraGrid1.Rows[i].Cells["Sync"].Value.ToString()))
            {                    
                ultraGrid1.Rows[i].Activation = Infragistics.Win.UltraWinGrid.Activation.Disabled;
            }
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多