Получение ввода из Textbox в GridView и передача его в качестве аргумента - PullRequest
0 голосов
/ 22 января 2020

Я относительно новичок в .net c#. Я просто возился с grid view и застрял в той части, где мне нужно передать данные из textbox в gridview в column in the gridview. Я написал код в RowUpdating.

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            using (SqlConnection sqlcon = new SqlConnection(strConnection))
            {
                sqlcon.Open();
                TextBox txtname = Grid1.Rows[e.RowIndex].FindControl("TextBox1") as TextBox;
                String val_comment = txtname.Text;

                int id = Convert.ToInt16(Grid1.DataKeys[e.RowIndex].Values["id"].ToString());

                SqlCommand cmd = new SqlCommand("update dbo.[2KEE_RAW] set comment=@comment where id=@id", sqlcon);
                cmd.Parameters.AddWithValue("comment",val_comment);
                cmd.Parameters.AddWithValue("id", id);

                int i = cmd.ExecuteNonQuery();

                Grid1.EditIndex = -1;
                sqlcon.Close();
                BindData();
            }
        }

Я получаю исключение о том, что txtname равно null . В чем здесь проблема?

Вот код .apsx:

<!DOCTYPE html>

  <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:GridView runat="server" ID="Grid1" AutoGenerateColumns="False" BackColor="#DEBA84"
                BorderColor="#DEBA84" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="id"
                AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" OnRowEditing="GridView1_RowEditing"
                OnRowUpdating="GridView1_RowUpdating" OnRowDeleting="GridView1_RowDeleting" OnRowCancelingEdit="GridView1_RowCancelingEdit"
                CellSpacing="2">
                <Columns>
                    <asp:BoundField HeaderText="Account ID" DataField="Account ID"></asp:BoundField>
                    <asp:BoundField HeaderText="Amount" DataField="Actuals - CY ITM Local"></asp:BoundField>
                    <asp:BoundField HeaderText="Company Code" DataField="Company Code"></asp:BoundField>
                    <asp:BoundField HeaderText="Comment" DataField="Comment" />
                    <asp:TemplateField HeaderText="Enter Comment">
                        <ItemTemplate>
                            <input runat="server" type="text" id="TextBox1" />
                        </ItemTemplate>
                    </asp:TemplateField>
                </Columns>
            </asp:GridView>
        </div>
       </form>
    </body>
   </html>

Ответы [ 3 ]

0 голосов
/ 22 января 2020

Вы забыли найти правильный код под ячейкой, чтобы получить TextBox

TextBox txtname = (TextBox)Grid1.Rows[0].Cells[5].Controls[1];
0 голосов
/ 27 января 2020

Спасибо за код .aspx.

Пожалуйста, вызовите BindData () в функции загрузки страницы, как показано ниже.

protected void Page_Load(object sender, EventArgs e) 
{ 
  if (!IsPostBack)
  { 
    BindData(); 
  } 
}

Пожалуйста, проверьте и подтвердите.

0 голосов
/ 22 января 2020
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
    HtmlInputText txtname = (HtmlInputText)GridView1.Rows[e.RowIndex].FindControl("TextBox1");

    string strId= GridView1.DataKeys[e.RowIndex].Values[0].ToString(); //Here You will Get DataKeys..

    SqlConnection conn = new SqlConnection("");//Put Your Sql connection
    SqlDataAdapter da = new SqlDataAdapter("", conn);
    conn.Open();
    da.UpdateCommand = new SqlCommand("update dbo.[2KEE_RAW] set comment='" + txtname.Value + "' where id='" + strId + "'", conn);
    da.UpdateCommand.ExecuteNonQuery();
    conn.Close();
    GridView1.EditIndex = -1;
    bindgrid(); // Again bind the Same gridview
}

/ * Попробуйте это ... это решило вашу проблему .. * /

  1. Вы используете HTML Управление в GridView .. вот почему ваш контроль не обнаруживается в GridView Обновление ... оно отображается как ("null")

  2. Итак, используйте HtmlInputText

  3. если вам нужно текстовое значение в строке, используйте ...

    String val_comment = txtname.Value; // Поскольку HTML элемент управления всегда содержит значение ... . (не использовать как ".text")

Просто посмотрите это изображение ... Я уже использовал этот тип кода в моем проекте ...

enter image description here

...