【问题标题】:How can I get html column of gridview to prepopulate form from database?如何获取 gridview 的 html 列以从数据库中预填充表单?
【发布时间】:2017-04-11 20:52:34
【问题描述】:

我有一个带有几个复选框和 texbox 的 asp.net 网络表单,提交时数据存储在 SQL 服务器上。

我有一个单独的网络表单,它由一个网格视图组成,该网格视图由表单中的数据组成。

我想在 gridview 中添加一个额外的列,该列有一个 html 链接,用于根据提交到数据库的数据重新加载和填充表单的每条记录。

ASP.NET:

<asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" DataSourceID="GridDataSource">
    <Columns>
        <asp:BoundField DataField="SiteID" HeaderText="ID"></asp:BoundField>
        <asp:BoundField DataField="Name" HeaderText="Name"></asp:BoundField>
        <asp:BoundField DataField="Date" HeaderText="Date"></asp:BoundField>
    </Columns>
</asp:GridView>

我有可以从下面的数据库中填充表单复选框的工作代码:

C# 代码隐藏:

SqlCommand cmd = null;
string conn = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
string queryString = @"SELECT AA, BB, CC FROM Test " +
    "WHERE SITE_ID = @SiteID";

using (SqlConnection connection = new SqlConnection(conn))
{
    SqlCommand command = new SqlCommand(queryString, connection);
    connection.Open();
    cmd = new SqlCommand(queryString);
    cmd.Connection = connection;

    cmd.Parameters.Add(new SqlParameter("@SiteID", //the name of the parameter to map
          System.Data.SqlDbType.NVarChar, //SqlDbType value
          20, //The width of the parameter
          "SITE_ID")); //The name of the column source
    //Fill the parameter with the value retrieved
    //from the text field
    cmd.Parameters["@SiteID"].Value = 500;

    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        CheckBox1.Checked = (reader.GetBoolean(reader.GetOrdinal("AA")));
        CheckBox2.Checked = (reader.GetBoolean(reader.GetOrdinal("BB")));
        CheckBox3.Checked = (reader.GetBoolean(reader.GetOrdinal("CC")));
    }
}

正如您在代码中看到的那样,我的问题是它只会返回 SiteID = 500 的值。我希望 html 列将 SiteID 与每条记录相关联,并在单击链接时打开带有来自该 SiteID 的填充数据的表单。这可能吗?我希望我在这里说得通。

【问题讨论】:

    标签: c# jquery html asp.net gridview


    【解决方案1】:

    您可以使用TemplateField 执行此操作。在该模板中,您可以创建指向详细信息页面的链接,或者如果它在同一页面上,则可以创建一个带有正确 SiteID 的按钮

    <Columns>
        <asp:TemplateField HeaderText="Link">
            <ItemTemplate>
                <a href="/Details?SiteID=<%# Eval("SiteID") %>">Click here</a>
    
                <asp:LinkButton ID="LinkButton1" runat="server" OnCommand="LinkButton1_Command" CommandArgument='<%# Eval("SiteID") %>'>Click here</asp:LinkButton>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
    

    【讨论】:

    • 感谢 VDWWD 的建议。现在我似乎有另一个问题。当我单击该链接时,尽管我在地址栏中看到它,但它并没有进行更改。我确定这是因为我的代码隐藏中的这一行: cmd.Parameters["@SiteID"].Value = 500;我应该把它改成什么?
    • 我想通了。我需要添加字符串 SiteID = Request.QueryString["SiteID"];另外,我需要将 500 更改为 SiteID。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-15
    • 1970-01-01
    • 2018-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-28
    相关资源
    最近更新 更多