我有一个有两个数据表的数据集。
在第一个数据表中我有EmpNo,EmpName和EmpAddress
在第二个数据表中我有Empno,EmpJoindate,EmpSalary。
我想要一个结果,我应该在gridview中显示EmpName作为标签和他/她的详细信息
我使用第一个表填充数据表,并将EmpNo作为数据键。
然后我在拥有EmpNo,EmpJoinDate和EmpAddress的数据表中填充gridview。
我的代码如下所示
Datalist1.DataSource = dt;
Datalist1.DataBind();
for (int i = 0; i < Datalist1.Items.Count; i++)
{
int EmpNo = Convert.ToInt32(Datalist1.DataKeys[i]);
GridView gv = (GridView)Datalist1.FindControl("gv");
gv.DataSource = dt2;
gv.DataBind();
}
现在我遇到了问题,我必须将相应员工的详细信息绑定到gridview。而上述代码将显示gridview中所有员工的所有详细信息。
如果我们使用IEnumerable,我们给出一个条件,其中(a =&gt; a.eno = EmpNo),并将该列表绑定到gridview。
我如何在数据表中执行此操作。
请不要给我改变存储过程的建议,这会导致两个表中的值,因为这不能改变。 我必须在现有的对象中找到解决方案。
此致 HEMA
您好, 我修改了如下程序 伊戈尔,而不是datarelation,(我的TL不赞成它)我使用IEnumerable
DataTable dt = new DataTable(); dt.Columns.Add( “EMPNO”); for(int i = 65; i <70; i ++) { DataRow dr = dt.NewRow(); dr [“EmpNo”] = i.ToString(); dt.Rows.Add(DR); }
DataTable dt2 = new DataTable();
dt2.Columns.Add("EmpNo");
dt2.Columns.Add("EmpName");
for (int i = 65; i < 70; i++)
{
DataRow dr = dt2.NewRow();
dr["EmpNo"] = i.ToString();
dr["EmpName"] = Convert.ToChar(i);
dt2.Rows.Add(dr);
}
Datalist1.DataSource = dt;
Datalist1.DataBind();
IEnumerable<DataRow> sequence = dt2.AsEnumerable();
for (int i = 0; i < Datalist1.Items.Count; i++)
{
string EmpNo = Datalist1.DataKeys[i].ToString();
string strExpr = "EmpNo =" + EmpNo.ToString();
GridView Gridview1 = (GridView)Datalist1.Items[i].FindControl("Gridview1");
Gridview1.DataSource = sequence.Where(t => t.Field<string>("EmpNo") == EmpNo);
Gridview1.DataBind();
}
我的Designer.aspx如下
<asp:DataList ID="Datalist1" runat="server" DataKeyField="EmpNo">
<ItemTemplate>
<asp:GridView ID="Gridview1" runat="server">
</asp:GridView>
</ItemTemplate>
</asp:DataList>
执行时我没有观察到任何结果,我看到错误为
屏幕上的RowError HasErrors
我在gridview中包含了绑定字段控件 如
<asp:GridView ID="Gridview1" AutoGenerateColumns="true" runat="server">
<Columns>
<asp:BoundField DataField="EmpNo" />
</Columns>
</asp:GridView>
在执行时,它会抛出一个错误说明 在所选数据源上找不到名为“EmpNo”的字段或属性。
我使用调试模式检查了“序列”,它在数组中有值, 我已经强调了,
所以我哪里出错了
答案 0 :(得分:1)
1)您必须在这两个表之间添加关系:Master和Detail(使用DataSet编辑器)。
2)然后使用关系来检索相关记录,例如:
DataRelation customerOrdersRelation =
customerOrders.Relations.Add("CustOrders",
customerOrders.Tables["Customers"].Columns["CustomerID"],
customerOrders.Tables["Orders"].Columns["CustomerID"]);
foreach (DataRow custRow in customerOrders.Tables["Customers"].Rows)
{
Console.WriteLine(custRow["CustomerID"].ToString());
foreach (DataRow orderRow in custRow.GetChildRows(customerOrdersRelation))
{
Console.WriteLine(orderRow["OrderID"].ToString());
}
}
在您的情况下,您应该将detailt datagrid的DataSource分配给currentMasterRow.GetChildRows(masterDetailRelation)