TextBox в Gridview возвращает значение NULL или 'System.Web.UI.WebControls.TextBox' - PullRequest
0 голосов
/ 13 июня 2018

У меня проблема с получением данных из текстового поля.TextBox расположен в Gridview.Я попытался отладить, и он показал, что моя переменная, где я собираю значение текстового поля, возвращает null или System.Web.UI.WebControls.TextBox.

Не могли бы вы помочь мне выяснить, в чем проблема?

Вот код из серверной части и gridview

public void Button_Submit_Onclick(object sender, EventArgs e)
{
    for (int i = 0; i < GridView2.Rows.Count; i++)
    {
        //Textbox from Gridview
        TextBox txt_field = (TextBox)GridView2.Rows[i].Cells[12].FindControl("txt_Comment");
        //Connection string
        con.ConnectionString = ConfigurationManager.ConnectionStrings["TestDeductionsConnectionString2"].ToString();
        //id of column
        int recordid = Convert.ToInt32(GridView2.DataKeys[i].Values[0]);
        //checkbox value
        CheckBox cbox = (CheckBox)GridView2.Rows[i].FindControl("CheckBox1");
        bool private1 = Convert.ToBoolean(cbox.Checked); 
        //open connection and creating sqlcommand
        SqlCommand cmd = new SqlCommand();
        cmd.Connection = con;
        con.Open();
        cmd.CommandText = "Update DetailCosts set private='" + private1 + "' Komentar='" + txt_field + "'  where recordid=" + recordid;
        //
        cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
        cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
        cmd.Parameters.AddWithValue("@Komentar", SqlDbType.NChar).Value = txt_field.ToString();               
        cmd.ExecuteNonQuery();

        if (private1==true)
        {
            //DateTime date = DateTime.Now;
            //cmd.CommandText = "Update AprovedCosts set AprovedCosts.AprovalUser = ";

            cmd.CommandText = "Update DetailCosts set privateCost=Costs where recordid=" + recordid;
            cmd.ExecuteNonQuery();
        }
        else
        {

            cmd.CommandText = "Update DetailCosts set privateCost=0 where recordid=" + recordid;
            cmd.ExecuteNonQuery();
        }
        con.Close();
    }
}

Gridview:

<asp:TemplateField HeaderText="Comment">
    <ItemTemplate>
        <asp:TextBox ID="txt_Comment" runat="server" Text='<%# Eval("Komentar") %>'></asp:TextBox>
    </ItemTemplate>
</asp:TemplateField>

Ответы [ 3 ]

0 голосов
/ 13 июня 2018

Вы ищете элемент управления, который не может существовать , и присваиваете его элементу управления textbox.

TextBox txt_field = (TextBox)GridView2.Rows[i].Cells[12].FindControl("txt_Comment");

Почему бы вам не присвоить значение textbox.text дляGridView2.Rows [i] .Cells [12] .Text?

Что вернет значение, если оно существует.

0 голосов
/ 13 июня 2018

Чтобы сделать его более простым, просто используйте его следующим образом

TextBox txt_field = (TextBox)GridView2.Rows[i].Cells[12].FindControl("txt_Comment");
string txt = txt_field.text; //store it's text in string

и замените command

вместо txt_field, просто напишите txt или txt.ToString();

 cmd.CommandText = "Update DetailCosts set private='" + private1 + "' Komentar='" + txt + "'  where recordid=" + recordid;
    //
    cmd.Parameters.AddWithValue("@private1", SqlDbType.Bit).Value = private1;
    cmd.Parameters.AddWithValue("@recordid", SqlDbType.Int).Value = recordid.ToString();
    cmd.Parameters.AddWithValue("@Komentar", SqlDbType.NChar).Value = txt.ToString();   
0 голосов
/ 13 июня 2018

Попробуйте использовать txt_field.Text вместо txt_field.ToString() для получения значения.

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