【问题标题】:gridview InnerJoin query without using datasource controls不使用数据源控件的gridview内连接查询
【发布时间】:2016-05-30 19:59:22
【问题描述】:

我正在尝试从 MySQL 工作台显示下表以显示在 asp.net 上

为了在 asp.net 上显示表格,我使用的是网格视图,代码如下:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand" DataKeyNames ="child_id" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" AllowPaging="True" OnPageIndexChanging="GridView1_PageIndexChanging">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="SelectFullDetails">Select</asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="child_id" HeaderText="Id" />
            <asp:BoundField DataField="child_firstname" HeaderText="FirstName" />
            <asp:BoundField DataField="parent_surname" HeaderText="Surname" />
            <asp:BoundField DataField="club_name" HeaderText="Club" />
        </Columns>
    </asp:GridView>



        protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            GridViewDataBind();
        }
    }

    private void GridViewDataBind()
    {
        GridView1.DataSource = DetailsAccessLayer.GetAllChildBasicDetails();
        GridView1.DataBind();
    }
 public class ChildBasic
{

    public int child_id { get; set; }
    public string child_firstname { get; set; }
    public string parent_surname { get; set; }
    public string club_name { get; set; }

}
 public class DetailsAccessLayer
{
    public static List<ChildBasic> GetAllChildBasicDetails()
    {
        List<ChildBasic> listChild = new List<ChildBasic>();
        string CS = ConfigurationManager.ConnectionStrings["dbyouthworkConnectionString"].ConnectionString;
        using (MySqlConnection con = new MySqlConnection(CS))
        {
            var InnerJoinClub = "SELECT child_details.child_id, child_details.child_firstname,child_details.parent_surname, enrolment_details.club_name FROM child_details INNER JOIN enrolment_details ON child_details.child_id = enrolment_details.child_id";
            MySqlCommand cmd = new MySqlCommand(innerJoinClub, con);
            con.Open();
            MySqlDataReader rdr = cmd.ExecuteReader();
            while (rdr.Read())
            {
                ChildBasic childbasic = new ChildBasic();
                childbasic.child_id = Convert.ToInt32(rdr["child_id"]);
                childbasic.child_firstname = rdr["child_firstname"].ToString();
                childbasic.parent_surname = rdr["parent_surname"].ToString();
                childbasic.club_name = rdr["club_name"].ToString();

                listChild.Add(childbasic);
            }
        }
        return listChild;
    }

但每次我运行程序时,我都会收到错误:System.Web.dll 中发生了“System.Web.HttpException”类型的异常,但未在用户代码中处理

附加信息:在所选数据源中找不到名为“club_name”的字段或属性。

谁能告诉我代码中的错误以及如何纠正它?

非常感谢

编辑:这是发生错误的地方

private void GridViewDataBind()
    {
        GridView1.DataSource = DetailsAccessLayer.GetAllChildBasicDetails();
        GridView1.DataBind();        }

GridView1.DataBind()

【问题讨论】:

  • 你能把调试点放到以“var InnerJoinClub = ....”开头的行,看看是哪一行导致了这个错误吗? (也不要忘记 con.Close(); )
  • 如果你找不到任何东西,你可以在 using(...) 部分的末尾尝试 rdr[3].ToString() 而不是 rdr["club_name"].ToString() 吗?
  • - 刚刚添加了上面的代码
  • - 尝试了 rdr[3].ToString 并且仍然得到同样的错误

标签: c# mysql gridview inner-join mysql-workbench


【解决方案1】:

在您的 SQL 查询中,您需要为 enrolment_details.club_name 提供别名,例如 enrolment_details.club_name AS club_name

【讨论】:

    【解决方案2】:

    试试这样:

    public DataTable ConvertToDatatable(List<ChildBasic> list)
    {
        DataTable dt = new DataTable();
    
        dt.Columns.Add("child_id");
        dt.Columns.Add("child_firstname");
        dt.Columns.Add("parent_surname");
        dt.Columns.Add("club_name");
        foreach (var item in list)
        {
            var row = dt.NewRow();
    
            row["child_id"] = item.child_id;
            row["child_firstname"] = Convert.ToString(item.child_firstname);
            row["parent_surname"] = Convert.ToString(item.parent_surname);
            row["club_name"] = Convert.ToString(item.parent_surname);
    
            dt.Rows.Add(row);
        }
    
        return dt;
    }
    
    private void GridViewDataBind()
        {
            GridView1.DataSource = ConvertToDatatable(DetailsAccessLayer.GetAllChildBasicDetails());
            GridView1.DataBind();        
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-31
      • 1970-01-01
      相关资源
      最近更新 更多