【问题标题】:Checkbox column in Infragistics win ultragridInfragistics 中的复选框列赢得了 ultragrid
【发布时间】:2011-07-24 04:24:30
【问题描述】:

我是 Infragistics 的新手。 在我的 winforms 应用程序中,我使用 Ultrawingrid 来显示数据库中的数据。

如何将复选框列显示为网格中的第一列? 另外,我需要捕获选中/取消选中事件,然后在应用程序中读取相应的网格行/单元格。

您能帮我解决这个问题吗?

感谢阅读。

【问题讨论】:

  • 请贴出 InitializeComponent() 方法的代码。谢谢。

标签: winforms infragistics ultrawingrid


【解决方案1】:

您需要为要呈现为复选框的列获取 UltraGridColumn 实例。比如:

UltraGridColumn ugc = myGrid.DisplayLayout.Bands[0].Columns[@"myColumnKey"];

然后将列的显示样式更改为复选框并确保它允许编辑:

ugc.Style = ColumnStyle.CheckBox;
ugc.CellActivation = Activation.AllowEdit;

在我看来,将这个网格初始化代码放在表单的 Load 事件或网格的 InitializeLayout 事件的处理程序中是合适的。

处理网格的 CellChange 事件以查看用户何时更改复选框值:

private void mygrid_CellChange(object sender, CellEventArgs e)
{
    if (StringComparer.OrdinalIgnoreCase.Equals(e.Cell.Column.Key, @"myColumnKey"))
    {
         // do something special when the checkbox value is changed
    }
}

根据要求,这里是演示添加未绑定列、将其移动到最左侧位置、处理单元格更改事件以及从网格中检索附加值的示例代码。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        using (SqlConnection conn = new SqlConnection("Data Source=.;Initial Catalog=tempdb;Trusted_Connection=true"))
        {
            DataSet ds = new DataSet();
            SqlDataAdapter da = new SqlDataAdapter("select * from sysobjects", conn);
            conn.Open();
            da.Fill(ds); 
            ultraGrid1.DataSource = ds;
        }
    }

    private void ultraGrid1_InitializeLayout(object sender, Infragistics.Win.UltraWinGrid.InitializeLayoutEventArgs e)
    {
        UltraGridColumn checkColumn = e.Layout.Bands[0].Columns.Add(@"checkColumnKey", @"caption");
        checkColumn.Style = Infragistics.Win.UltraWinGrid.ColumnStyle.CheckBox;
        checkColumn.CellActivation = Activation.AllowEdit;
        checkColumn.Header.VisiblePosition = 0;
    }

    private void ultraGrid1_CellChange(object sender, CellEventArgs e)
    {
        if (!StringComparer.Ordinal.Equals(e.Cell.Column.Key, @"checkColumnKey"))
        {
            return;
        }

        bool checkedState = bool.Parse(e.Cell.Text);

        DataRowView row = e.Cell.Row.ListObject as DataRowView;
        string name = row.Row[@"name"] as string;

        MessageBox.Show(string.Format("Checked={0}, name={1}", checkedState, e.Cell.Row.ListObject));
    }
}

【讨论】:

  • 非常感谢 PaulF,但我需要将此复选框列添加为未绑定的列。我需要将其显示为网格中所有 db 列之前的第一列。现在是显示为最后一列。此外,当我单击复选框时,即使将 CellActivation 设置为 AllowEdit 也不会被选中。请帮助。
  • 嗨,吉米。感谢您的惊人回答。我有一个问题作为扩展。为了方便起见,我在 DataTable 中添加了具有数据类型的列。并将数据表添加到超网格。无论如何我可以为表格配置 CellChange 事件?
  • @PrasaanthNeelakandan 我认为这应该可以通过 Infragistics 实现。我通常不使用 DataTables,但我会尝试使用设计器将 CellChange 事件添加到您的网格中。然后在处理程序中设置断点并查看 CellEventArgs,特别是 e.Cell.Column 和 e.Cell.Column.Key。这可能会让您入门。
【解决方案2】:

为什么不确保你的数据层返回 Bool,Infragistics 网格会自动(自动生成)它的复选框

【讨论】:

  • 我遇到了同样的问题。将其添加到您的数据层可能是错误的,因为某些字段仅涉及 UI,您应始终小心不要将 UI 和数据层代码混用太多。
猜你喜欢
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-01
相关资源
最近更新 更多