Поиск Asp.Net в отредактированных значениях Code-behind в GridView с автоматически сгенерированными столбцами - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь создать пользовательский элемент управления видом сетки, который сможет отображать, редактировать и удалять записи, привязанные к любым данным. В моем пользовательском контроле у ​​меня есть:

<asp:GridView ID="EditableGrid" runat="server" Width="500px" Height="500px" AllowSorting="True"
                AutoGenerateColumns = "true"
       AutoGenerateDeleteButton   ="true" AutoGenerateEditButton="true"
                OnRowEditing="EditableGrid_RowEditing" 
                OnRowCancelingEdit="EditableGrid_RowCancelingEdit"
                OnRowUpdating="EditableGrid_RowUpdating"
                OnRowDeleting="EditableGrid_RowDeleting"

                 ></asp:GridView> 

В моем коде есть:

public void InitGrid(string theconnstr, string thetablename)
        {
            connstr = theconnstr;
            tablename = thetablename;
          //  Session["edgconnstr"] = connstr;
          //  Session["edgtablename"] = tablename;
            con = new SqlConnection(connstr);
            con.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM " + tablename;
                using (SqlDataReader rd = cmd.ExecuteReader())
                {
                    if (!rd.HasRows) return;
                    fields = new List<EdField>();
                    for (int i =0; i < rd.FieldCount; i++)
                    {
                        fields.Add(new EdField(rd.GetName(i), rd.GetDataTypeName(i)));
                    }
                }
            }
            con.Close();
        }

        public void Bind()
        {
         //   connstr = (String)Session["edgconnstr"];
          //  tablename = (String)Session["edgtablename"];
            con = new SqlConnection(connstr);
            con.Open();
            using (SqlCommand cmd = new SqlCommand())
            {
                cmd.Connection = con;
                cmd.CommandText = "SELECT * FROM " + tablename;
                using (SqlDataAdapter da = new SqlDataAdapter(cmd))
                {
                    using (DataTable dt = new DataTable())
                    {
                        da.Fill(dt);
                        EditableGrid.DataSource = dt;
                        EditableGrid.DataBind();
                        EditableGrid.Visible = true;
                    }
                }
            }
            con.Close();
        }


        protected void EditableGrid_RowEditing(object sender, GridViewEditEventArgs e)
        {
            EditableGrid.EditIndex = e.NewEditIndex;
            Bind();
        }

        protected void EditableGrid_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            EditableGrid.EditIndex = -1;
            Bind();
        }


        protected void EditableGrid_RowCommand(object sender, GridViewCommandEventArgs e)
        {
        }


        protected void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {


        }

Теперь я безуспешно пытался найти новые значения отредактированной строки в обработчике событий EditableGrid_RowUpdating. У меня просто нет доступа к текстовым полям, и поэтому я не могу выполнить запрос, чтобы обновить старые значения до нового значения. Чего я хочу добиться, даже возможно?

1 Ответ

0 голосов
/ 09 мая 2018

Используйте коллекцию e.NewValues.

protected void EditableGrid_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    int tx = Convert.ToInt32(e.NewValues[0]);
}
...