[英]Deleting multiple rows from my DataGridView leaves 1 behind
List<DataGridViewRow> rowsToDelete = new List<DataGridViewRow>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
DataGridViewCheckBoxCell chk = row.Cells[0] as DataGridViewCheckBoxCell;
if (Convert.ToBoolean(chk.Value) == true)
rowsToDelete.Add(row);
}
//loop through the list to delete rows added to list<T>:
foreach (DataGridViewRow row in rowsToDelete)
dataGridView1.Rows.Remove(row);
我選擇了 3 個項目,它刪除了 2 個,但留下了 1 個。
我們如何修復它?
更新
聽起來您想刪除未選中的項目。
您將要做的是從底部開始並到達頂部,否則您將剩下多余的物品。
例子:
for (int i = DataGridView1.SelectedRows.Count - 1; -1 < i; i--)
{
object objChecked = DataGridView1.SelectedRows[i].Cells[0].Value;
if ((objChecked != null) && !(bool)objChecked)
{
DataGridView1.Rows.RemoveAt(i);
}
}
更新 2:
根據您在下面的評論,此版本着眼於Rows
而不是SelectedRows
。
在開始循環之前檢查Rows
存在:
if ((0 < DataGridView1.Rows.Count) && (0 < DataGridView1.Columns.Count))
{
for (int i = DataGridView1.Rows.Count - 1; -1 < i; i--)
{
var row = DataGridView1.Rows[i];
if ((row.Cells[0].Value != null) && (row.Cells[0].Value != DBNull.Value))
{
bool isChecked = (bool)row.Cells[0].Value;
if (isChecked)
{
DataGridView1.Rows.Remove(row);
}
}
}
}
它在錯誤檢查方面更加健壯,並且通過引用而不是通過索引刪除行。
已編輯
您可以通過 SelectedRows 屬性刪除。
確保數據網格上的MultiSelect
屬性設置為 true。
然后,您可以在您選擇的情況下使用SelectedRows
屬性:
這就是你所需要的,試試這個代碼:
for (int i = dataGridView1.Rows.Count -1; i >= 0 ; i--)
{
if ((bool)dataGridView1.Rows[i].Cells[0].FormattedValue)
{
dataGridView1.Rows.RemoveAt(i);
}
}
要么
foreach (DataGridViewRow row in DataGridView1.SelectedRows)
{
DataGridView1.Rows.Remove(row);
}
ASPX頁面:
<strong>Asp.Net : Delete Multiple Records form datagridview in one time<br />
</strong>
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px"
CellPadding="4" EnableModelValidation="True" ForeColor="Black">
<Columns>
<asp:TemplateField>
<EditItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="id" HeaderText="Sr No" />
<asp:BoundField DataField="doc_name" HeaderText="Name" />
<asp:BoundField DataField="doc_add" HeaderText="Address" />
<asp:BoundField DataField="doc_mob" HeaderText="Mobile No" />
<asp:BoundField DataField="doc_email" HeaderText="Email" />
</Columns>
<FooterStyle BackColor="#CCCC99" ForeColor="Black" />
<HeaderStyle BackColor="#333333" Font-Bold="True" ForeColor="White" />
<PagerStyle BackColor="White" ForeColor="Black" HorizontalAlign="Right" />
<SelectedRowStyle BackColor="#CC3333" Font-Bold="True" ForeColor="White" />
</asp:GridView>
<br />
<asp:Button ID="Button1" runat="server" Font-Size="12pt"
onclick="Button1_Click1" Text="Delete" />
<br />
頁面隱藏代碼:
SqlConnection conn = new SqlConnection(@"server=server-pc; database=HMS; integrated security=true");
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack == false)
{
load_data();
}
}
public void load_data()
{
SqlDataAdapter adp = new SqlDataAdapter("select * from doc_master", conn);
DataSet ds = new DataSet();
adp.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
}
protected void Button1_Click1(object sender, EventArgs e)
{
CheckBox ch;
for (int i = 0; i < GridView1.Rows.Count; i++)
{
ch = (CheckBox)GridView1.Rows[i].Cells[0].Controls[1];
if (ch.Checked == true)
{
int id = Convert.ToInt32(GridView1.Rows[i].Cells[1].Text);
SqlCommand cmd = new SqlCommand("delete from doc_master where ID=" + id + " ", conn);
conn.Open();
cmd.ExecuteNonQuery();
conn.Close();
}
}
load_data();
}
詳細代碼請訪問: http : //www.gtuguide.com/2014/05/deleting-multiple-rows-in-gridview.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.