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

このステートメントは間違っています-

 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 に答える
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に設定されていないかどうかを確認してください。(ボタンクリックイベントでグリッドビューを表示しているため。)

また、この方法でレコードを挿入することはお勧めしません。むしろ、 SQLインジェクションを回避するために、代わりにストローされたプロシージャを作成してパラメータを渡します。

于 2012-11-27T12:13:37.527 に答える