Редактировать строку в gridview с гиперссылкой в ​​ASP.NET - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть gridview, отображающий информацию об экземпляре продукта;Мне нужна гиперссылка в моем столбце действий, чтобы открыть страницу просмотра / редактирования, которая отображает данные строки.Как сделать так, чтобы ссылка выводила данные из этой конкретной строки на страницу редактирования?

Примечание: есть другие вопросы с похожими названиями, однако они не охватывают эту конкретную тему.

Ответы [ 3 ]

3 голосов
/ 15 апреля 2011

Попробуйте что-нибудь подобное?

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"]);
                ...
            }
            ...
        }
     }
3 голосов
/ 15 апреля 2011

Используйте datakeys в виде сетки, используя datakey, вы получите идентификатор каждой нажатой гиперссылки, а затем вы можете использовать этот идентификатор для простого редактирования или удаления выбранных элементов.В приведенном ниже коде просто найдите элемент управления гиперссылкой, передайте ключ данных и напишите для него d update.Чтобы переместить ваши данные на другие страницы, вы можете заняться сеансами, но если вы разрабатываете сеанс коммерческого веб-сайта, не будет хорошей идеей из-за проблем безопасности, в этом случае используйте куки.

 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 голосов
/ 15 апреля 2011

Существует n + 1 способ решения этой проблемы.Если вы используете источник данных sql, вы можете сделать так, чтобы VS генерировал sql и редактировал логику для вас, если у вас нет особых требований.Вот код проекта учебник .

Другая часто используемая тактика - добавить командную кнопку в строку и заполнить аргумент команды идентификатором строки, которую вы хотите отредактировать, затем в дескрипторе события oncommand, какую бы логику вам ни понадобилась.

Вы также можете использовать простую ссылку html и использовать параметры get.Или вы можете заняться сессией, как я уже сказал, множество способов решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...