SqlDataSource、ObjectDataSourceなどを使用せずに、グリッドビューの行と基になるデータソースを削除する方法
質問
2列のデータテーブルを返すメソッドを呼び出すことで、データを入力するGridViewがあります。データテーブルを返した後、それをグリッドビューにバインドして表示します。
SqlDataSourceまたはObjectDataSourceを使用していないので、gridviewから行を削除する適切な方法と、データベース内の基になるデータは何ですか。ポートフォリオと呼ばれる1つのテーブルから削除するだけです。これには、一意のキーであるID、PortfolioID、およびPortfolioNameの3つの列があります。データテーブルは、ポートフォリオ名とポートフォリオ内のアイテム数を返します。 Row_Deletingイベントでこれを実行できると考えていたので、次のようなことを行います。
DELETE * FROM Portfolio WHERE PortfolioID = @PortfolioID
私は正しい道を歩んでいますか? PortfolioIDをGridView DataKeyプロパティにバインドできますか(これを行うための正しい構文は何ですか?)
解決
ボタンを押すと行が削除されると仮定します。もしそうなら、私は通常このようなことをします:
<asp:GridView ID="myGrid" runat="server" DataKeyNames='PortfolioID' OnRowCommand="dgStudent_RowCommand">
<Columns>
<asp:ButtonField ButtonType="Button" CommandName="Delete" Text="Delete"></asp:ButtonField>
</Columns>
</asp:GridView>
次に、分離コードで:
protected void myGrid_RowCommand(object sender, GridViewCommandEventArgs e)
{
// create and open DB connection
int PortfolioID = (int)myGrid.DataKeys[Convert.ToInt32(e.CommandArgument)].Value;
DeleteRow(PortfolioID); // your implementation
myGrid.DataBind();
}
DeleteRow
は、行削除(上記のSQLの可能性があります)の実装です。 myGridはグリッドです。 PortfolioID
は主キーです。これは、グリッド内の唯一のボタンが削除ボタンであることも前提としています。ボタンが複数ある場合は、 e.CommandName ==&quot; Delete&quot;
をチェックして、削除ボタンが表示されることを確認する必要があります。
他のヒント
おそらく、DB呼び出しをそこからさらに抽象化します。行の変更が完了した後、おそらく行を処理します。後処理では、行の状態を確認して、行のデータをどうするかを決定できます。
理解したように、データベーステーブルからファイル化されたデータグリッドビューから行を削除する必要があります。これは、何らかのデータベースからテーブルレコードを削除することを意味します。 これを行う最良の方法は、テキストボックスをどこかに置き、データグリッドビューのイベントを作成することです(行選択イベントで)。このようにして、削除したい行を選択すると、その行のIDがテキストボックスに送信されます(これはコーディングされます)。削除する行のIDを取得したら、もう1つのボタンを追加してデータベース内のレコードを削除し、datagridviewをもう一度バインドします。
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
this.txt_portfolioId.Text=dataGridView1.CurrentRow.Cells["portfolioID"].Value.ToString();
}
private void btn_Delete(object sender, EventArgs e)
{
//You need to connect to database(regular database connection this connection string and sqlcommand and add this sqlquerry:
ポートフォリオID = '&quot; + Convert.ToInt32(this.portfolioId.Text)+&quot;';
の場合、テーブルから削除*
}