2

我有一个GridView我在每列的项目模板中放置文本框的地方。我想在单击按钮时将我将在文本框中输入的值存储到数据库中。

protected void Button1_Click(object sender, EventArgs e)
{
    GridView1.Visible = true;
    DataTable dt = new DataTable();
    DataRow row = dt.NewRow();
    for (int i = 0; i < GridView1.Rows.Count; i++)
    {
        string UserID = GridView1.Rows[i].Cells[1].Text;
        string q="insert into details (name) values('"+UserID+"')";

        SqlCommand cmd = new SqlCommand(q, con);
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dt);
    }
}

问题是当我运行页面时文本框甚至不可见。

4

3 回答 3

1

您不能直接从网格中获取文本框的引用。所以首先你需要从每一行网格中找到文本框。代码应该是这样的..

protected void Button1_Click(object sender, EventArgs e)
{
GridView1.Visible = true;
DataTable dt = new DataTable();
DataRow row = dt.NewRow();
for (int i = 0; i < GridView1.Rows.Count; i++)
{
   ## add below code ##
    TextBox txtUsrId=(TextBox)GridView1.Rows[i].FindControl("Your textbox id");
    string UserID = txtUsrId.Text;

    string q="insert into details (name) values('"+UserID+"')";

    SqlCommand cmd = new SqlCommand(q, con);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    da.Fill(dt);
}

}

让我知道..

于 2012-11-28T05:37:00.723 回答
0

它应该是这样的。

protected void Button1_Click(object sender, EventArgs e)
{
    Int32 TotalRecords = 0;
    SqlConnection con = new SqlConnection("data source=.\; Integrated Security=SSPI; initial catalog=Testdb;User ID=sa;password=abc123;");            

    foreach (GridViewRow gvRow in GridView1.Rows)
    {            
        TextBox textBox1 = (TextBox)gvRow.FindControl("textBox1");

        String q = "INSERT INTO details ([name]) VALUES('" + textBox1.Text.Trim() + "')";
        SqlCommand cmd = new SqlCommand(q, con);

        con.Open();
        TotalRecords += cmd.ExecuteNonQuery();
        con.Close();
    }

    lblMessage.Text = "Total " + TotalRecords + " inserted successfully.";

}

关于未在页面上显示的文本框,请检查GridView、TemplateField 或其自身的 TextBox的Visible属性是否未设置为false。(当您使 gridview 在按钮单击事件中可见时。)

另外我不建议以这种方式插入记录。相反,我会创建一个存储过程并传递参数,以避免SQL INJECTION

于 2012-11-27T12:13:37.527 回答
0

这个说法是错误的——

 string UserID = GridView1.Rows[i].Cells[1].Text;

您不能直接访问子控件的值。像这样做-

TextBox tt = (TextBox)GridView1.Rows[i].FindControl("your text box");
string UserId= tt.Text;

谈到你的问题,你应该展示你的 Gridview 源以获得帮助。

于 2012-11-27T11:57:34.967 回答