2010-03-13 64 views
0

我有一个包含两个数据表的数据集。如何从数据表中获取一组行

在第一数据表我有EMPNO,EmpName和EmpAddress

在第二数据表我有EMPNO,EmpJoindate,EmpSalary。

我想要的结果,我应该表现出EmpName作为标签和他/她在GridView

我填充第一表数据列表,并有EMPNO作为datakeys细节。

然后,我填充数据表里面有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 => a.eno = EmpNo),并将该列表绑定到gridview。

如何在数据表中执行此操作。

请不要给我建议更改导致两个表中的值的存储过程,因为这是不能更改的。 我必须在现有的对象中找到解决方案。

问候 喝骂

嗨, 我修改程序如下 伊戈尔,代替的DataRelation,(我的TL不赞成的话)我用了IEnumerable

DataTable的DT =新的DataTable() ; dt.Columns.Add(“EmpNo”); (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'的字段或属性。

我查了“序列”使用调试模式,它的阵列, 我已经强调过值,

所以我要去哪里错了

  • 结果视图中展开的结果查看将枚举了IEnumerable
  • [0] {}的System.Data.DataRow的System.Data.DataRow HasErrors假布尔
  • ItemArray {对象[2]}对象[] [0] “65” 对象字符串{} [1] “A” 对象字符串{} RowError “” 串 RowState的新增System.Data.DataRowState
  • 表{} System.Data.DataTable
  • 静态成员
  • 非公共成员
+0

看到我的最新答案。 – garik 2010-03-13 10:47:09

回答

1

1)你有这两个表之间添加关系:主从(使用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的数据源分配给currentMasterRow.GetChildRows(masterDetailRelation)