WPF中如何获取绑定DataGrid列的值并用于条件判断?
解决DataGrid获取绑定字段值并做条件格式化的问题
你现在的问题在于混淆了DataGrid列定义和数据实体:col1是DataGrid的列配置对象,它本身不存储具体数据,真正的Sale_Id_ass值在你绑定的BD_Payments_TBL集合的每个实体里。下面分几种场景给出解决方案:
场景1:遍历所有数据批量处理
如果要一次性检查所有数据的Sale_Id_ass值并做处理,可以先把数据源存为变量,直接遍历实体:
// 先把数据源存起来,方便后续遍历 var paymentData = context.BD_Payments_TBL.ToList(); General_Data_grid.ItemsSource = paymentData; General_Data_grid.Columns.Clear(); var col1 = new DataGridTextColumn(); col1.Header = "Id"; col1.Binding = new Binding("Sale_Id_ass"); // 遍历每个数据实体获取Sale_Id_ass foreach (var item in paymentData) { int v = item.Sale_Id_ass; // 假设Sale_Id_ass是int类型 if (v == 1) { // 这里可以对该数据项做预处理,比如修改字段值、标记状态等 } } General_Data_grid.Columns.Add(col1);
场景2:DataGrid显示时针对每行做格式化
如果要在DataGrid渲染行的时候,根据Sale_Id_ass的值设置行/列样式(比如背景色、字体样式),推荐用LoadingRow事件:
var paymentData = context.BD_Payments_TBL.ToList(); General_Data_grid.ItemsSource = paymentData; General_Data_grid.Columns.Clear(); var col1 = new DataGridTextColumn(); col1.Header = "Id"; col1.Binding = new Binding("Sale_Id_ass"); General_Data_grid.Columns.Add(col1); // 绑定行加载事件,每行渲染时触发 General_Data_grid.LoadingRow += (sender, e) => { // 将行数据转为实体类型 var paymentItem = e.Row.Item as BD_Payments_TBL; if (paymentItem != null && paymentItem.Sale_Id_ass == 1) { // 示例:设置该行背景色 e.Row.Background = Brushes.LightGreen; // 也可以针对col1列设置单元格样式,比如修改字体颜色 // 或者通过绑定转换器来控制列的显示格式 } };
场景3:获取选中行的字段值
如果要在用户选中某行后获取Sale_Id_ass值做判断,可以通过SelectedItem属性:
// 比如在按钮点击事件或SelectionChanged事件中 var selectedItem = General_Data_grid.SelectedItem as BD_Payments_TBL; if (selectedItem != null) { int v = selectedItem.Sale_Id_ass; if (v == 1) { // 执行你的格式化逻辑 } }
内容的提问来源于stack exchange,提问作者Emilius
相关产品推荐
相关产品推荐

