【问题标题】:How do I fetch a set of rows from data table如何从数据表中获取一组行
【发布时间】:2011-01-27 03:03:42
【问题描述】:

我有一个包含两个数据表的数据集。

在第一个数据表中,我有 EmpNo、EmpName 和 EmpAddress

在第二个数据表中,我有 Empno、EmpJoindate、EmpSalary。

我想要一个结果,我应该在网格视图中显示 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();
        }

现在我有一个问题,我得把对应Employee的Details绑定到gridview上。而上面的代码将在gridview中显示所有员工的所有详细信息。

如果我们使用 IEnumerable,我们会给出一个条件 where(a=>a.eno=EmpNo),然后将该列表绑定到 gridview。

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

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

问候 盒马

嗨, 我修改了程序如下 Igor,而不是 datarelation,(我的 TL 不赞成)我使用了 IEnumerable

DataTable dt = new DataTable(); dt.Columns.Add("EmpNo"); 对于 (int i = 65; i

    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 false bool
  • ItemArray {object[2]} object[] [0] "65" 对象 {string} [1] "A" 对象 {string} 行错误“”字符串 RowState 添加了 System.Data.DataRowState
  • 表 {} System.Data.DataTable
  • 静态成员
  • 非公共成员

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:

    1) 您必须在这两个表之间添加关系:Master 和 Detail(使用 DataSet 编辑器)。

    2) 然后使用relation来检索相关记录,例如:

    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());
        }
    }
    

    在您的情况下,您应该将详细数据网格的 DataSource 分配给 currentMasterRow.GetChildRows(masterDetailRelation)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-27
      • 2023-03-28
      • 2011-05-29
      • 2011-09-10
      • 2011-08-17
      • 2019-04-13
      • 1970-01-01
      • 2012-08-01
      相关资源
      最近更新 更多