webform c#中的datagridview在页脚中显示查询

Posted

技术标签:

【中文标题】webform c#中的datagridview在页脚中显示查询【英文标题】:datagridview in webform c# show query in footer 【发布时间】:2013-12-05 06:18:47 【问题描述】:

我有两个在 C# 中运行在 datagridview 中的查询,一个是显示所有数据。另一个设置为显示在页脚中。页脚正在显示,只是不显示我的查询。 查询一个(带页脚)

protected void Button2_Click(object sender, EventArgs e)

   mysqlCommand cmd = new MySqlCommand("SELECT * FROM Customer", cs);
   cs.Open();
   MySqlDataReader dgl = cmd.ExecuteReader();
   dg.ShowFooter = true;
   dg.DataSource = dgl;
   dg.DataBind();
   cs.Close();

**query two(footer query)**
protected void dg_DataBound(object sender, EventArgs e)

   MySqlCommand cmd = new MySqlCommand("SELECT SUM(Donation) AS Total_Donation FROM Customer", cs);
   cs.Open();
   String totalDonations = Convert.ToString(cmd.ExecuteScalar());
   cs.Close();
   dg.FooterRow.Cells[3].Text = totalDonations;

数据网格显示查询一运行良好,页脚甚至显示但没有任何数据。

【问题讨论】:

你好像没有控件来显示第二个查询的返回值... 嗯所以 dg.DataSource = dgl; ? 好吧,您使用“页脚”一词,所以我假设这是一个网页。如果您尝试显示查询,则需要在 Web 表单上使用 label 之类的内容来显示该数据,对吗? 嗯,它是 datagridview 中的页脚,我不确定 Brian。我试试看 这样做:string totalDonation = string.Format("Donation:0", cmd.ExecuteScaler()); 【参考方案1】:

虽然你可以使用它,但还是有办法改进它。

在第一种方法中,using 语句可以更好地管理连接:

protected void Button2_Click(object sender, EventArgs e)

    DataTable dt = new DataTable();
    //Assuming you have a connection string strConnect
    using (SqlConnection con = new SqlConnection(strConnect))
    
        con.Open();
        using (SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Customer", con))
        
            da.Fill(dt);
        
    
    dg.ShowFooter = true;
    dg.DataSource = dt;
    dg.DataBind();

还有第二种方法:

protected void dg_DataBound(object sender, EventArgs e)

    String totalDonations = string.Empty;
    //Assuming you have a connection string strConnect
    using (SqlConnection con = new SqlConnection(strConnect))
    
        con.Open();
        using (SqlCommand cmd = new SqlCommand("SELECT SUM(Donation) AS Total_Donation FROM Customer", con))
        
            totalDonations = Convert.ToString(cmd.ExecuteScalar());
        
    

    dg.FooterRow.Cells[3].Text = totalDonations;

可能我会使用 GridView 的 RowDataBound 写入页脚,在那里我可以知道行的类型:

protected void dg_RowDataBound(object sender, GridViewRowEventArgs e)

    if (e.Row.RowType == DataControlRowType.Footer)
    
        String totalDonations = string.Empty;
        //Assuming you have a connection string strConnect
        using (SqlConnection con = new SqlConnection(strConnect))
        
            con.Open();
            using (SqlCommand cmd = new SqlCommand("SELECT SUM(Donation) AS Total_Donation FROM Customer", con))
            
                totalDonations = Convert.ToString(cmd.ExecuteScalar());
            
        
        e.Row.Cells[3].Text = totalDonations;
    

编辑:这是我用来测试的标记:

<asp:GridView ID="dg" runat="server" AutoGenerateColumns="true" OnDataBound="dg_DataBound" ShowFooter="true"> 
</asp:GridView>

【讨论】:

非常感谢,我试过了,改成MYSQL,加上我的连接字符串,剩下的。网格视图显示,但页脚数据不显示。我稍后会继续研究它,如果它有效,我会接受你的回答。再次感谢 啊...第二个 sql 有错字...应该是客户,而不是客户 仍然没有显示页脚数据,我稍微检查一下代码,看看我是否可以让它工作。 可以访问我用过的源码here。 感谢您发送请求 benoats@gmail.com【参考方案2】:

经过几个小时的问题,我已经解决了。

corrected code



        MySqlCommand cmd = new MySqlCommand("SELECT * FROM Customer", cs);
        MySqlCommand cmdtwo = new MySqlCommand("SELECT SUM(Donation) AS Total_Donation FROM Customer", cs);
        cs.Open();
        MySqlDataReader dgl = cmd.ExecuteReader();
        dg.DataSource = dgl;
        dg.ShowFooter = true;
        dg.DataBind();
        cs.Close();
        cs.Open();
        string totalDonations = Convert.ToString(cmdtwo.ExecuteScalar());
        cs.Close();
        dg.FooterRow.Cells[7].Text = "Total £";
        dg.FooterRow.Cells[8].Text = totalDonations;

虽然我确信有更好的方法可以做到这一点,但如果您知道,请随时编辑。

【讨论】:

以上是关于webform c#中的datagridview在页脚中显示查询的主要内容,如果未能解决你的问题,请参考以下文章

在c#中保存datagridview中的数据

如何在 C# 中获取 DataGridView 中的主键?

C#中的DataGridViews数组

如何允许用户在 c# 中的 datagridview 组合框中手动输入

如何将值收集到数组中并将集合传递给 C# 中的 datagridview?

如何在C#中 双击datagridview1中的一行数据,添加到新的datagridview2中。 B/C VS2010