上午写代码的时候遇到个问题,用DataTable.Select("筛选条件")筛选数据,然后付给另一个DataTable。结果运行时出现错误 。错误信息如下:DataBinding:“System.Data.DataRowView”不包含名为“CityName”的属性。
出错代码
public class VirtualData
{
public VirtualData()
{
}
public static DataTable getCityVData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("CityName", typeof(string));
dt.Columns.Add("UpperCity", typeof(int));
DataRow dr = dt.NewRow();
dr[0] = 01;
dr[1] = "石家庄";
dr[2] = 0;
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1[0] = 02;
dr1[1] = "邯郸";
dr1[2] = 0;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = 0101;
dr2[1] = "桥东区";
dr2[2] = 01;
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3[0] = 0202;
dr3[1] = "永年县";
dr3[2] = 02;
dt.Rows.Add(dr3);
return dt;
}
}
protected void testDisCity()
{
DataTable dt = new DataTable();
DataRow[] arrdr = VirtualData.getCityVData().Select("uppercity=0");
if (arrdr.Length > 0)
{
foreach (DataRow dr in arrdr)
{
dt.ImportRow(dr);
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
else
{
Pagetop1.Text = "没有数据";
}
}
public class VirtualData
{
public VirtualData()
{
}
public static DataTable getCityVData()
{
DataTable dt = new DataTable();
dt.Columns.Add("Id", typeof(int));
dt.Columns.Add("CityName", typeof(string));
dt.Columns.Add("UpperCity", typeof(int));
DataRow dr = dt.NewRow();
dr[0] = 01;
dr[1] = "石家庄";
dr[2] = 0;
dt.Rows.Add(dr);
DataRow dr1 = dt.NewRow();
dr1[0] = 02;
dr1[1] = "邯郸";
dr1[2] = 0;
dt.Rows.Add(dr1);
DataRow dr2 = dt.NewRow();
dr2[0] = 0101;
dr2[1] = "桥东区";
dr2[2] = 01;
dt.Rows.Add(dr2);
DataRow dr3 = dt.NewRow();
dr3[0] = 0202;
dr3[1] = "永年县";
dr3[2] = 02;
dt.Rows.Add(dr3);
return dt;
}
}
protected void testDisCity()
{
DataTable dt = new DataTable();
DataRow[] arrdr = VirtualData.getCityVData().Select("uppercity=0");
if (arrdr.Length > 0)
{
foreach (DataRow dr in arrdr)
{
dt.ImportRow(dr);
}
DataList1.DataSource = dt;
DataList1.DataBind();
}
else
{
Pagetop1.Text = "没有数据";
}
}
遇到这个问题后。第一反应是字段名写错了。可检查后发现并没有写错。又检查了其他地方,也没有发现错误所在。于是百度一下。结果百度也无能为力,我只好自己研究。
设了N个断点。最后发现筛选后得到的是DataRow数组。其并不包含原来DataTable的架构信息。知道了错误所在后。在testDisCity中再次构建一个和getCityVData中架构一样的DataTable。结果运行通过。
小弟是新手不知道发这样的贴是不是浪费感情。见丑了。另外那位大侠要是还有好点的解决办法小弟不吝赐教。