【问题标题】:Showing a dynamic grid view from SQL select statement从 SQL 选择语句显示动态网格视图
【发布时间】:2015-01-21 01:01:44
【问题描述】:

在我的 ASP.Net 网络表单上,我显示了一个来自 SQL Server 的表。但是,我想做的是让网页的用户能够选中一些框,并且只有在我刷新页面后才显示那些特定的列。

这里是aspx html:

<div style="width: 1250px; height: 300px; overflow: auto">
    <asp:GridView ID="GridView1" HeaderStyle-BackColor="Black" HeaderStyle-ForeColor="Silver" RowStyle-BackColor="#EEEEEE" AlternatingRowStyle-BackColor="White" 
        AlternatingRowStyle-ForeColor="#000" runat="server" AutoGenerateColumns ="false" AllowPaging="false" OnPageIndexChanging="OnPageIndexChanging" AllowSorting="True">
        <Columns>
            <asp:BoundField DataField ="WeekEndingDate" HeaderText="Week Ending Date" ItemStyle-Width="150px" dataformatstring="{0:MM-dd-yyyy}" />
            <asp:BoundField DataField ="Week_Number" HeaderText="Week Number" ItemStyle-Width="150px" />
            <asp:BoundField DataField ="Class" HeaderText="Class" ItemStyle-Width="150px" />
            <asp:BoundField DataField ="Animal" HeaderText="Animal" ItemStyle-Width="150px" />
            <asp:BoundField DataField ="North_Island" HeaderText="North Island" ItemStyle-Width="150px" DataFormatString="{0:F2}" />
            <asp:BoundField DataField ="South_Island" HeaderText="South Island" ItemStyle-Width="150px" DataFormatString="{0:F2}" />
            <asp:BoundField DataField ="New_Zealand" HeaderText="New Zealand" ItemStyle-Width="150px" DataFormatString="{0:F2}" />
        </Columns>
    </asp:GridView>
</div>

这里是 bindgrid 方法:

private void BindGrid()
    {
        string strConnString = "server= N-1077; Trusted_Connection=yes; database=Slaughter; connection timeout=30";
        using (SqlConnection con = new SqlConnection(strConnString))
        {
            using (SqlCommand cmd = new SqlCommand("SELECT CONVERT(date, Week_Ending_Date) AS WeekEndingDate," + 
                "Week_Number, Class, North_Island = CAST(North_Island as float), South_Island = CAST(South_Island as float)," +
                "(CAST(North_Island as float)) + (CAST(South_Island as float)) AS New_Zealand," +
                "Animal = (CASE WHEN Class = 'Sheep' OR Class = 'Lamb' THEN 'Ovine' WHEN Class = 'Calf' THEN 'Calf' ELSE 'Bovine' END)" +
                "FROM Slaughter ORDER BY WeekEndingDate DESC"))
            {
                using (SqlDataAdapter sda = new SqlDataAdapter())
                {
                    cmd.Connection = con;
                    sda.SelectCommand = cmd;
                    using (DataTable dt = new DataTable())
                    {
                        sda.Fill(dt);
                        GridView1.DataSource = dt;
                        GridView1.DataBind();
                    }
                }
            }
        }
    }

有没有一种简单的方法来选择特定的列并只显示这些?即,如果他们只对 week_number、class 和 south_island 感兴趣,它只会显示这三列的数据?我不介意根据用户输入构建 SQL 查询,但这就是我如何更改 boundfield Datafields 以反映在该查询中选择的那些列。

【问题讨论】:

  • asp.BoundField 具有 Visible 属性。将其设置为false,该列将被隐藏

标签: c# sql asp.net data-binding webforms


【解决方案1】:

这是使用 Visible 属性的一种方法。

protected void RefreshSQLDisplay(object sender, EventArgs e)
{
    foreach (BoundField col in GridView1.Columns)
    {
        if (col.DataField == "WeekEndingDate")
        {
            col.Visible = false;
            break;
        }
    }
}

缺点是列会还在内存中,sql查询会取回数据。所以还是为了性能考虑还是改一下sql查询吧。

更新:我按照你的要求编辑了代码

【讨论】:

  • 我正在尝试这个,但是得到一个错误,说没有扩展方法 'DataField' 接受类型为 'object' 的第一个参数(您是否缺少 using 指令或程序集引用?)。我有:使用 System.Web;使用 System.Web.UI;使用 System.Web.UI.WebControls;
  • 我没有编译代码。我用你的代码更新了答案。
  • 对我来说已经足够好了,你给了我答案,它只是在那种格式下不太有效。
猜你喜欢
  • 2021-03-22
  • 2020-09-09
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多