Infragistics Ultragrid如何根据属性禁用行

时间:2012-11-06 18:32:32

标签: infragistics ultragrid

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

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

2)在诸如Gridize的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;
}

1 个答案:

答案 0 :(得分:5)

您也可以在自己的功能中编写它。我希望以下解决方案可以帮到你。

创建一个Windows窗体"测试" ..并拖放一个" ultragird"在窗口形式如下图所示.. enter image description here

创建表单加载函数" 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;
            }
        }
    }