0

グリッドビュー行の削除に問題があります。ドロップダウンリストで値を選択してグリッドビューにデータを入力し、追加ボタンをクリックすると、グリッドビューに値が追加されます。コードは次のとおりです。

私のaspxで:

<asp:GridView ID="GridView1" runat="server" 
            CssClass="mGrid" EmptyDataText = "There are no records to display">
            <Columns>
                <asp:TemplateField ItemStyle-Width="10">
        <HeaderTemplate>

        </HeaderTemplate>
        <ItemTemplate>
            <asp:CheckBox ID="CheckBox1" runat="server"/>
        </ItemTemplate>
    </asp:TemplateField>

            </Columns>
</asp:GridView>

私のコードビハインドでは:

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
    {
        DataSet ds = new DataSet();
        DataTable dt = new DataTable();
        DataColumn dc = new DataColumn("Id");
        DataColumn dc1 = new DataColumn("Name");
        //DataColumn dc2 = new DataColumn("Id");

        dt.Columns.Add(dc);
        dt.Columns.Add(dc1);
       // dt.Columns.Add(dc2);
        ds.Tables.Add(dt);
        Session["data"] = ds;
        GridView1.DataBind();
    }
}

protected void btnSave_Click(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection("Data Source=GATE-PC\\SQLEXPRESS;Initial Catalog=dbProfile;Integrated Security=True");
    con.Open();

    foreach (GridViewRow row in GridView1.Rows)
    {
        SqlCommand cmdd = new SqlCommand("Insert into Profile (Id, profile_Id)VALUES(@id, @pid)", con); 
        cmdd.CommandType = System.Data.CommandType.Text;
        cmdd.Parameters.AddWithValue("@id", row.Cells[1].Text);
        cmdd.Parameters.AddWithValue("@pid", txtbid.Text);
        cmdd.ExecuteNonQuery();
    }
}

protected void btnAdd_Click(object sender, EventArgs e)
{
    DataSet ds = (DataSet)Session["data"];
    DataRow dr = ds.Tables[0].NewRow();
    dr[0] = DropDownList1.Text.Trim();
    dr[1] = DropDownList1.SelectedItem;
    //dr[2] = txtId.Text.Trim();
    ds.Tables[0].Rows.Add(dr);
    GridView1.DataSource = ds;
    GridView1.DataBind();
}

今、次のコードを使用して、グリッドビューでチェックされた行を削除しようとしています:

protected void btnRemove_Click(object sender, EventArgs e)
{
    ArrayList del = new ArrayList();

    foreach (GridViewRow row in GridView1.Rows)
    {
        if (row.RowType == DataControlRowType.DataRow)
        {
            CheckBox chkDelete = (CheckBox)row.Cells[0].FindControl("CheckBox1");

            if (chkDelete != null)
            {
                if (chkDelete.Checked)
                {

                    string id = row.Cells[1].Text;
                    del.Add(id);
                }
            }
        }
    }
    GridView1.DataBind();
}

上記の btnRemove コードでは、クリックすると、チェックされていない行であっても、グリッドビューのすべての値が削除されます。必要なのは、チェックされた行だけではありません。チェックボックスを使用する以外に、グリッドビューで行を削除する簡単な方法はありますか? 私はasp.netでc#を使用しています。

4

1 に答える 1

0

行を削除しますが、グリッドビューを再バインドしないでください。

GridView.DeleteRowメソッドを使用して、 arraylist でフィルタリングした行を削除しますdel

GridView1.DataBind();a を設定せずに呼び出すと、DataSource何もバインドされません。

似ている

于 2013-06-03T14:24:12.053 に答える