最初の行をすでに消費した後、選択したすべての行に対してコントロールが-eventをDataGridView
トリガーしないようにするにはどうすればよいですか?UserDeletingRow
このグリッドはwcf-webserviceのオブジェクトにバインドされています。削除する必要のあるすべてのオブジェクトに対して、deleteメソッドを1回だけ実行したいと思います。
このイベントハンドラーは、選択されたすべての行に対してトリガーされ、常に「本当に削除しますか」をトリガーします-メッセージボックス:
private void Grid_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)
{
switch (this.Type)
{
case AdminType.Channel:
List<Channel> channels = GrdChannel.SelectedRows.Cast<DataGridViewRow>()
.Select(row => (Channel)row.DataBoundItem).ToList();
e.Cancel = !Delete_Channels(channels);
break;
// other types ...
default:
break;
}
}
このメソッドは、確認後にWebサービスを呼び出します。
private bool Delete_Channels(List<Channel> channels)
{
var msg = string.Format("Do you really want to delete {0}?", channels.Count == 1 ? "this channel" : "these channels");
var title = channels.Count == 1 ? "Delete channel" : "Delete channels";
bool yes = MessageBox.Show(msg, title, MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes;
if (yes)
{
using (var db = new ERP_ServiceClient())
db.DeleteChannels(channels, this.IdUser);
string message = string.Format("{0} deleted successfully: {1}"
, channels.Count == 1 ? "Channel" : "Channels"
, string.Join(",", channels.Select(p => p.Name)));
channelBindingSource.Remove(channels);
Main.ShowStatusMessage(message);
}
return yes;
}