【问题标题】:Edit row in gridview with hyperlink in ASP.NET在 ASP.NET 中使用超链接在 gridview 中编辑行
【发布时间】:2011-08-05 23:28:56
【问题描述】:

我有一个显示产品实例信息的网格视图;我需要在我的操作列中添加一个超链接,以调出显示行数据的查看/编辑页面。如何使链接将特定行中的数据带入编辑页面?

注意:还有其他标题相似的问题,但是,它们不涉及该特定主题。

【问题讨论】:

    标签: c# asp.net sql-server visual-studio gridview


    【解决方案1】:

    有 n+1 种方法可以解决这个问题。如果您使用的是 sql 数据源,如果您没有特定要求,您可以让 VS 为您生成 sql 和编辑逻辑。这是一个代码项目tutorial

    另一种常用的策略是在行中添加一个命令按钮,并使用您要编辑的行的 ID 填充命令参数,然后在 oncommand 事件中处理您需要的任何逻辑。

    您还可以使用简单的 html 链接并使用获取参数。或者你可以像我说的那样进行会话,有很多方法可以解决这个问题。

    【讨论】:

      【解决方案2】:

      试试这样的?

      查看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"]);
                      ...
                  }
                  ...
              }
           }
      

      【讨论】:

      • 您的网格将位于 ViewProducts.aspx 页面上,并带有一个“编辑”列,如上所示。当有人单击“编辑”链接时,他们将被转移到 EditProduct.aspx 页面 - 在此页面上,您可以拥有数据的文本框,您可以使用作为查询字符串参数传递的 productID 检索这些文本框:)
      • 抱歉打扰了,@IrishChieftan,但我有后续问题要问你。在 productID 行下方,我会放置 sql 命令来填充文本框?
      • 使用参数化查询避免SQL注入csharp-station.com/Tutorials/AdoDotNet/Lesson06.aspx
      【解决方案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 ,它会减少你的代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多