如何知道网格上复选框的已选中/未选中状态? [英] How can I know the checked/unckecked status of the checkboxes on the grid?

查看:114
本文介绍了如何知道网格上复选框的已选中/未选中状态?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码段通过添加列构造了 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);
}

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



UPDATE
I 不能使用绑定



我创建了 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);
}

然后,我做了一个代码段, c $ c> MessageBox :

  string testValues =; 

for(int i = 0; i {
DataGridRow row =(DataGridRow)dgDetalle.ItemContainerGenerator.ContainerFromIndex
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 。请注意,我已经在第一个代码段创建了 CheckBox

  4. 处理所选项

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


I've constructed a DataGrid by adding columns programatically using the following snippet:

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);
}

How can I know the checked/unckecked status of the checkboxes on the grid?

UPDATE I can't use binding

解决方案

Finally I got it...

I created the DataGrid using this snippet:

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);
}

Then, I made a snippet to show data from selected items in a 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);

To summarize:

  1. Get the row using ItemContainerGenerator
  2. Get the specific column from the DataGrid and take it as a generic presentation object (FrameworkElement)
  3. Get the content using VisualTreeHelper. Notice that I got the CheckBox I've created on the first snippet
  4. Process the selected item

Hope it helps anyone...!

这篇关于如何知道网格上复选框的已选中/未选中状态?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆