【发布时间】:2014-03-02 04:40:04
【问题描述】:
此代码中发生的情况是,当列表视图中的项目数为 3 时,drv 变量为空。 谁能告诉我我做错了什么?
private void btn_save_Click(object sender, RoutedEventArgs e)
{
DataRowView drv;
bool valueToCheck;
List<Common.Rule> lst = new List<Common.Rule>();
Common.Rule ru = new Common.Rule();
lst = rr.GetAllRules().ToList();//getting all rules from database
for (int i = 0; i < ltv_rules.Items.Count; i++)
{
drv = ltv_rules.Items.GetItemAt(i) as DataRowView;
valueToCheck = Convert.ToBoolean(drv["IsSet"]);// to get the value of the combobox isSet from the list view
ru = lst[i];//getting the value of the isSet before it was binded to the list view.
if (ru.IsSet != valueToCheck)//comparing the original value (before it was binded) to the value that i get from the listview
{
ru.IsSet = valueToCheck;
bool updated = rr.UpdateRule(ru);
}
}
}
【问题讨论】:
-
Can any one tell me what i'm doing wrong please?- 一切。首先,不要使用System.Data.DataTable。这只是一个美化的Dictionary<string,object>,它迫使你进入一堆可怕的演员阵容,Convert.ToMyGranny()和基于魔术字符串的东西。其次,创建一个适当的数据模型来保存您的数据。第三,如果这是 WPF,创建一个合适的 ViewModel,所有的问题都会神奇地消失。 -
第四,学习使用
var关键字,以免重复自己。第五,学习使用 LINQ,以便在 C# 中完成 99% 的 Collection 相关操作,而不是传统的过程式for循环等。 -
@HighCore,我看到你一直在写这篇关于
DataTable类的文章。该类型是快速获取和操作数据的有效且有用的方法,尤其是。使用数据库时。说它是一个“美化的Dictionary<string, object>”当然是不正确的,这是不是真的......要构造一个像DataTable一样运行的泛型类需要大量的工作。不过,我同意视图模型的说法。 -
@Killercam 是的,我很确定:
Convert.ToBoolean(dr["SomeBool"])在某种程度上比创建适当的强类型数据模型并执行model.MyBool而不是使用一堆可怕的magic-string-based 更有效evething 是object的东西,你需要不断地投射所有东西。请...如果您需要查询数据库,请使用实体框架,它不再是 1990 年了。 -
@Killercam
LINQ To Excel伙计。醒醒,现在已经不是 1990 年了。 C# 不是 java。
标签: wpf listview datarowview