【问题标题】:How can I know the checked/unckecked status of the checkboxes on the grid?我如何知道网格上复选框的选中/未选中状态?
【发布时间】:2012-05-17 04:38:24
【问题描述】:

我通过使用以下 sn-p 以编程方式添加列构建了一个 DataGrid

var check = new FrameworkElementFactory(typeof(CheckBox), "chkBxDetail");
dgDetalle.Columns.Add(new DataGridTemplateColumn() { CellTemplate = 
                      new DataTemplate() { VisualTree = check } });
for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

我如何知道网格上复选框的选中/未选中状态?

更新不能使用绑定

【问题讨论】:

  • 您将一个集合绑定到 DataGrid 并且该布尔属性是复选框的状态。
  • @Blam 我没有使用绑定,因为网格没有一组固定的列...
  • 这不应该阻止您绑定,但我之前曾尝试帮助您,您的典型反应是这不起作用。
  • @Blam 我没有说它不起作用。我只是不能因为我正在进行代码维护并且ItemsSource 设置为string[][],因此修改所有已经编写的代码可能比简单地编写sn-花费更多时间p 以获得所需的值。

标签: .net wpf datagrid checkbox datagridtemplatecolumn


【解决方案1】:

终于明白了……

我使用这个 sn-p 创建了DataGrid

var check = new FrameworkElementFactory(typeof(CheckBox));

dgDetalle.Columns.Add(new DataGridTemplateColumn()
    {
        CellTemplate = new DataTemplate() { VisualTree = check }
    });

for (int i = 0; i < 4; i++)
{
    DataGridTextColumn textColumn = new DataGridTextColumn();
    textColumn.Binding = new Binding(string.Format("[{0}]", i));
    dgDetalle.Columns.Add(textColumn);
}

然后,我做了一个 sn-p 来显示 MessageBox 中选定项目的数据:

string testValues = "";

for (int i = 0; i < dgDetalle.Items.Count; i++)
{
    DataGridRow row = (DataGridRow)dgDetalle.ItemContainerGenerator.ContainerFromIndex(i);
    FrameworkElement cellContent = dgDetalle.Columns[0].GetCellContent(row);
    CheckBox checkBox = VisualTreeHelper.GetChild(cellContent, 0) as CheckBox;
    if (checkBox != null && (checkBox.IsChecked ?? false))
    {
        List<string> item = (List<string>)dgDetalle.Items[i];
        foreach (var t in item)
        {
            testValues += t;
        }
    }
}

MessageBox.Show(testValues);

总结一下:

  1. 使用ItemContainerGenerator 获取行
  2. DataGrid 中获取特定列并将其作为通用表示对象 (FrameworkElement)
  3. 使用VisualTreeHelper 获取内容。请注意,我得到了在第一个 sn-p 上创建的 CheckBox
  4. 处理所选项目

希望它可以帮助任何人......!

【讨论】:

    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2013-09-06
    • 2016-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多