我有一个显示产品实例信息的gridview;我需要在“操作”列中添加一个超链接,以显示一个显示行数据的视图/编辑页面。如何使链接将该特定行的数据显示在编辑页面中?
注意:还有其他类似标题的问题,但是,它们不包含此特定主题。
答案 0 :(得分:3)
尝试这样的事情?
ViewProducts.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"]);
...
}
...
}
}
答案 1 :(得分:3)
在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,它会减少你的代码。
答案 2 :(得分:2)
有n + 1种方法可以解决这个问题。如果您正在使用sql数据源,那么如果您没有特定要求,您可以为VS生成sql和编辑逻辑。这是一个代码项目tutorial。
另一个常用的策略是在行中添加一个命令按钮,并使用要编辑的行的ID填充命令参数,然后在oncommand事件句柄中填充所需的逻辑。
您还可以使用简单的html链接并使用get参数。或者你可以像我说的那样会话有很多方法可以解决这个问题。