我通过使用以下代码段以编程方式添加列来构建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);
}
如何知道网格上复选框的已检查/未确认状态?
更新 我不能使用绑定
答案 0 :(得分:0)
最后我明白了......
我使用此代码段创建了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);
}
然后,我制作了一个代码段来显示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);
总结:
ItemContainerGenerator
DataGrid
获取特定列,并将其作为通用演示文稿对象(FrameworkElement
)VisualTreeHelper
获取内容。请注意,我在第一个代码段上创建了CheckBox
希望它可以帮助任何人......!