ASP.Net: получение DataKey из GridView при редактировании и удалении - PullRequest
4 голосов
/ 18 октября 2011

Я использую GridView элемент управления, который связан с List объектами, возвращенными из служебного метода.Элемент управления GridView имеет один из столбцов, установленный в качестве его DataKey.Когда строка имеет значение Selected, она запускает обработчик события Selected, и я могу использовать myGridView.SelectedDataKey.Value, чтобы получить значение столбца DataKey для выбранной строки.

Однако обработчик события для строкиEdited или Deleted, похоже, не имеют механизма для получения значения DataKey для рассматриваемой строки.Параметр arg события для этих обработчиков событий содержит индекс строки в GridView, но я специально использую значение DataKey.

Повторное получение списка объектов с помощью служебного метода вместе с индексомполученный из события параметр arg не является опцией, потому что список объектов мог измениться.

Может кто-нибудь сказать мне, как я могу это сделать?

TIA

Ответы [ 4 ]

17 голосов
/ 18 октября 2011
 protected void gridQuestion_RowDeleting(object sender, GridViewDeleteEventArgs e)
 {
     int id = (int)grdQuestions.DataKeys[e.RowIndex].Value;      
 }
2 голосов
/ 25 января 2013
protected void btnDelete_Click(object sender, EventArgs e)
{
 try
 {
     int i;
     Con.Open();
     cmd = new SqlCommand("USP_REGISTER", Con);
     cmd.CommandType = CommandType.StoredProcedure;
     cmd.Parameters.AddWithValue("@P_CH_ACTION_CODE", "D");
     for ( i = 0; i <= grdApplication.Rows.Count - 1; i++)
     {
         CheckBox Ck=grdApplication.Rows[i].FindControl("cbItem") as CheckBox;
         if (Ck.Checked==true)
            {
                int Id = (int)grdApplication.DataKeys[i].Values["INT_ID"];
                cmd.Parameters.AddWithValue("@P_INT_ID", Id);
                SqlParameter StrOut = new SqlParameter();
                StrOut = cmd.Parameters.AddWithValue("@P_MSG_OUT", "out");
                StrOut.Direction = System.Data.ParameterDirection.Output;
                cmd.ExecuteNonQuery();
                StrRetVal = (string)cmd.Parameters["@P_MSG_OUT"].Value;
            }
         Con.Close();
                 }

   }
   catch (Exception ex)
   {
       Response.Write(ex.Message);
   }
 }
1 голос
/ 24 октября 2013

вот мое решение:

в виде сетки установите DataKeyNames = "id".таким образом, строка будет иметь ключ данных

, затем в Grd_RowDataBound добавить атрибут к кнопке следующим образом:

LinkButton Btn= (LinkButton)e.Row.FindControl("BtnDelete");
if (Btn!= null)
{
         Btn.Attributes.Add("ROW_INDEX", e.Row.RowIndex.ToString());
}

, затем в событии OnClick использовать это:

int rowIndex= Convert.ToInt32(((LinkButton)sender).Attributes["ROW_INDEX"].ToString());
int id= Convert.ToInt32(Grd.DataKeys[rowIndex].Value);

и вы получили значение datakey в обратных передачах gridview.

0 голосов
/ 18 октября 2011

Вы можете использовать индексный номер, возвращаемый из события Edit / Delete, а затем выбрать строку вручную

String yourDataKey = GridView.DataKeys[e.NewSelectedIndex].Item["youfield"].tostring();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...