0

これは繰り返される質問のようですが、答えを得ることができません。

グリッド ビューがあり、グリッド ビューの外側のボタンをクリックすると、特定の行を削除する必要があります。

 protected void btnDelete_Click(object sender, EventArgs e)
      {
            dtable = (DataTable)Session["data"];
            DataRow row = dtable.Rows[DataGV1.SelectedIndex];
            dtable.Rows.Remove(row);
            DataGV1.DataSource = dtable;
            DataGV1.DataBind();
            Session["data"] = dtable;
        }

セッション変数には、データテーブルの以前の状態があります。

protected void DataGV1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridView _gridView = (GridView)sender;

        // Get the selected index 
         _selectedIndex = int.Parse(e.CommandArgument.ToString());
     }

Gridview コントロール

        onselectedindexchanged="DataGV1_SelectedIndexChanged" 
        OnRowCommand="DataGV1_RowCommand" OnRowDeleting="DataGV1_RowDeleting"
        AutoGenerateSelectButton="False" DataKeyNames="Role,Last_name">
        <Columns>
            <asp:ButtonField DataTextField="last_name" HeaderText="Last_name" CommandName="SingleClick"
                SortExpression="last_name" Text="Button" />
            <asp:BoundField DataField="role" HeaderText="role" SortExpression="role" />
             <asp:BoundField DataField="role" HeaderText="role"                      HeaderText="Frist_name" 
                 SortExpression="first_name" Text="First_name" />
        </Columns>
    </asp:GridView>

これはうまくいかないようです。どこが間違っているのか教えてください。

4

3 に答える 3

0

ボタンが の外側にある場合、イベントGridViewを処理する必要はありませんRowCommand(実際には不適切です)。

提案:

列を追加し、TemplateFieldTemplateField の ItemTemplate に CheckBox コントロールをドロップし、ボタンのクリック ハンドラーにコードを記述してGridView.Rowsコレクションを走査し、コントロールの値を読み取って選択された行を識別し、チェックCheckBoxされている場合は削除アクションを実行する必要がCheckBoxあります。

デモデータソース ( List<T>)

public class Item
{
    public int ID { get; set; }
    public string Name { get; set; }

    public static List<Item> Data()
    {
        List<Item> list = new List<Item>()
        {
                new Item(){ ID=11, Name="A"},
                new Item(){ ID=12, Name="B"},
                new Item(){ ID=13, Name="C"},
                new Item(){ ID=14, Name="D"},
                new Item(){ ID=15, Name="E"},
        };
        return list;
    }
}

マークアップ:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
   <Columns>
        <asp:ButtonField DataTextField="Name" HeaderText="Name" CommandName="SingleClick"
            SortExpression="last_name" Text="Button" />
        <asp:BoundField DataField="ID" HeaderText="ID" SortExpression="ID" />
    </Columns>
</asp:GridView>
<asp:Button ID="btnDelete" runat="server" Text="Button" />

コード ビハインド (Page_Load)

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        Session["data"] = Item.Data();
        GridView1.DataSource = Session["data"];
        GridView1.DataBind();
    }
    /*--- RowCommand handler ---*/
    GridView1.RowCommand += (sa, ea) =>
        {
            ViewState["RowIndex"] = ea.CommandArgument.ToString();
        };
    /*--- Delete button click handler ---*/
    btnDelete.Click += (sa, ea) =>
        {
            if (ViewState["RowIndex"] != null)
            {
                int index = int.Parse(ViewState["RowIndex"].ToString());
                List<Item> items = Session["data"] as List<Item>;
                items.RemoveAt(index);
                GridView1.DataSource = Session["data"];
                GridView1.DataBind();
                ViewState["RowIndex"] = null;
            }
        };
}
于 2012-07-05T06:38:39.493 に答える
0

グリッドビューから単一/複数の行を削除する方法を説明するこれらの記事を見てください。 http://technico.qnownow.com/2012/06/15/how-to-delete-multiple-rows-from-gridview-with-checkboxes/ http://technico.qnownow.com/2012/06/14/グリッドビューから行を削除する方法とクライアント側の確認/

于 2012-07-08T02:12:14.457 に答える
0

_selectedIndex を ViewState に保存する必要があります。次に、削除ボタンをクリックすると、Viewstate から _selectedIndex を取得し、それを使用してデータセットから行を削除し、グリッドをリロードします。

protected void DataGV1_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        GridView _gridView = (GridView)sender;

        // Get the selected index 
         ViewState["SelIndex"] = e.CommandArgument.ToString();
     }

protected void btnDelete_Click(object sender, EventArgs e)

  {
        if(ViewState["SelIndex"] == null)
            return;

        int selIndex = int.Parse(ViewState["SelIndex"]);

        dtable = (DataTable)Session["data"];
        DataRow row = dtable.Rows[selIndex ];
        dtable.Rows.Remove(row);
        DataGV1.DataSource = dtable;
        DataGV1.DataBind();
        Session["data"] = dtable;
    }
于 2012-07-05T06:34:09.233 に答える