【发布时间】:2011-08-05 23:28:56
【问题描述】:
我有一个显示产品实例信息的网格视图;我需要在我的操作列中添加一个超链接,以调出显示行数据的查看/编辑页面。如何使链接将特定行中的数据带入编辑页面?
注意:还有其他标题相似的问题,但是,它们不涉及该特定主题。
【问题讨论】:
标签: c# asp.net sql-server visual-studio gridview
我有一个显示产品实例信息的网格视图;我需要在我的操作列中添加一个超链接,以调出显示行数据的查看/编辑页面。如何使链接将特定行中的数据带入编辑页面?
注意:还有其他标题相似的问题,但是,它们不涉及该特定主题。
【问题讨论】:
标签: c# asp.net sql-server visual-studio gridview
有 n+1 种方法可以解决这个问题。如果您使用的是 sql 数据源,如果您没有特定要求,您可以让 VS 为您生成 sql 和编辑逻辑。这是一个代码项目tutorial。
另一种常用的策略是在行中添加一个命令按钮,并使用您要编辑的行的 ID 填充命令参数,然后在 oncommand 事件中处理您需要的任何逻辑。
您还可以使用简单的 html 链接并使用获取参数。或者你可以像我说的那样进行会话,有很多方法可以解决这个问题。
【讨论】:
试试这样的?
查看Products.aspx:
<columns>
<asp:HyperLinkField DataNavigateUrlFields="ProductID" HeaderText="Edit"
ItemStyle-Width="80"
DataNavigateUrlFormatString="EditProduct.aspx?productID={0}"
Text="Select" ItemStyle-HorizontalAlign="Center" />
...
</columns>
EditProduct.aspx:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.QueryString["productID"] != null)
{
productID = Convert.ToInt32(Request.QueryString["productID"]);
...
}
...
}
}
【讨论】:
在 gridview 中使用 datakeys,使用 datakey 会得到每个点击的超链接的 id,然后你可以使用该 id 轻松编辑或删除所选项目。在后面的代码中,只需找到超链接控件,传递数据键并为其编写 d update sql。为了将您的数据移动到其他页面,您可以使用会话,但如果您正在开发商业网站会话,由于其安全问题,这不是一个好主意,在这种情况下使用 cookie。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
if (Request.QueryString["productID"] != null)
{
productID = Convert.ToInt32(Request.QueryString["productID"]);
bindData(productID)
}
...
}
}
protected void bindData(int productID)
{
//to avoid sql injection as mentioned below use parameters
SqlConnection conn = new SqlConnection(ConnectionString); // define connection string globally or in your business logic
conn.Open();
SqlCommand sql = new SqlCommand("Select * From [Table] Where ID = @productID",conn);
SqlParameter parameter = new SqlParameter();
parameter.ParameterName = "@ID";
parameter.Value = productID;
sql.Parameters.Add(parameter);
conn.close()
}
你也可以使用 Microsoft.ApplicationBlocks.Data.dll 来避免重复 ado.net ,它会减少你的代码。
【讨论】: