我有一个基于数量的信息数据网格视图,它有3列类型文本和1列类型复选框,现在这个数据网格视图填充了库存表中同一项目的不同项目数量和不同的过期日期每当用户输入项目名称时
问题是每当选择项目并使用名为添加项目的按钮插入另一个数据网格视图时,清除用于数据输入的工具,也应清除基于数量的信息的数据网格视图,我尝试了这段代码但它完全删除了数据网格视图我只想清除从数据库中检索到的数据,并且仍然会出现数据网格视图的标题。
此代码用于添加项按钮
DataRow r = dt.NewRow();
r[0] = sBillItemBartxt.Text;
r[1] = sBillItemNametxt.Text;
r[2] = itemQuanttxt.Text;
r[3] = itemPricetxt.Text;
r[4] = itemTtlPricetxt.Text;
r[5] = expire;
dt.Rows.Add(r);
sBilldgv.DataSource = dt;
clearItemsText();
sBillTtlCostlbl.Text = (from DataGridViewRow row in sBilldgv.Rows where row.Cells[4].FormattedValue.ToString() != string.Empty select Convert.ToDouble(row.Cells[4].FormattedValue)).Sum().ToString();
sBillItemBartxt.ReadOnly = sBillItemNametxt.ReadOnly = false;
dtRes.Clear();
exDatedgv.DataSource = null;
exDatedgv.Rows.Clear();
exDatedgv.Columns.Clear();
答案 0 :(得分:0)
它们的清除方式与添加它们的方式几乎相同(不删除列)。
MyDataGridView.Rows.Clear();
这将以行而不是列为目标。
答案 1 :(得分:0)
我认为您的标头因
而被清除exDatedgv.Columns.Clear();
此外,如果您只想删除重复的行,您可能需要考虑使用循环来检查重复的行,并在添加新行之前删除该行。 我还会告诉你在你的datagridview中使用BindingList,但由于你的一个列是一个复选框我不知道如何用BindingList实现这个目标
答案 2 :(得分:0)
从您的代码中不清楚您要做什么。由于您使用DataTable
,我不确定为什么DataTable
dtRes.Clear();
不起作用,因为这将清除所有数据并保留列标题。当您设置exDatedgv.DataSource = null;
时,这将清除行和列,因此接下来的两行是多余的。要在您描述时清除DataGridView
,只需Clear
与DataTable
相关联的DataGridView
。这将使标题保持不变,但是在“清除”之后,表中将没有数据,因此如果您尝试重新绑定刚刚清除的表,则显然它将为空。如果您不想从表中删除数据,则必须自己设置标头,为此目的创建一个空表,或者只是(不是最佳解决方案)从主服务器创建副本。下面我创建了一个数据绑定DataGridView
,然后按照上面的描述用按钮2清除它,然后将DataGridView
重新设置(重新绑定)到原始表的副本。这会在按下按钮2时清除留下标题的DataGridView
,然后在按下按钮3时将DataGridView
重新设置为原始数据。希望这会有所帮助。
private void button2_Click(object sender, EventArgs e) {
//dataGridView1.Columns.Clear(); <-- clears headers
//dataGridView1.Rows.Clear(); <-- will crash if data is bound
//dataGridView1.DataSource = null; <-- removes headers
dt.Clear(); // <-- Clears data and leaves headers, removes data from table!
}
private void button3_Click(object sender, EventArgs e) {
dt = masterTable.Copy(); // <-- Get a new table if it was cleared
dataGridView1.DataSource = dt;
}