从 Datagridview 到其他 datagridview 添加在旧行下
Posted
技术标签:
【中文标题】从 Datagridview 到其他 datagridview 添加在旧行下【英文标题】:From Datagridview to other datagridview add under older rows 【发布时间】:2020-10-21 12:23:50 【问题描述】:我有小问题,我在下面分享了图片和代码。
我的代码块中有两个 datagridview。首先(表单左侧)datagridview 的名称searchDataGridView。这个网格通过一些过滤器显示我的数据库中的数据。第二个(表单右侧)datagridview 的名称 dataGridView1。如果我从第一个网格中选择一些行,则当我单击下一步按钮时,此网格会显示,然后这些行将添加到 dataGridView1。此代码块运行良好,但是当我单击下一步按钮并选择行并添加到 dataGridView1 时,我的问题是 searchDataGridVİew 将显示新项目,所选行将添加到 datagridView1,但是当我将新项目添加到 dataGridView 时,旧行将清除并且将添加新的选定行,但我需要新闻选定的行必须添加到旧行下。感谢您的帮助。
private void buttonNext_Click(object sender, EventArgs e)
Search searchObj = new Search();
DataTable dt = new DataTable();
dt.Columns.Add("Item");
dt.Columns.Add("Company");
dt.Columns.Add("Category");
dt.Columns.Add("Price");
foreach (DataGridViewRow drv in searchDataGridView.Rows)
bool chkboxselect = Convert.ToBoolean(drv.Cells["CheckBox"].Value);
if (chkboxselect)
dt.Rows.Add(drv.Cells[2].Value, drv.Cells[3].Value, drv.Cells[4].Value, drv.Cells[8].Value);
drv.DefaultCellStyle.BackColor = Color.Gray;
drv.DefaultCellStyle.ForeColor = Color.Aqua;
dataGridView1.DataSource = dt;
counter +=1;
if (counter == maxIndex)
counter =0;
try
searchCategoryComboBox.SelectedIndex = counter;
catch (System.ArgumentOutOfRangeException) // CS0168
MessageBox.Show("hata yakalandı");
return;
//catch for error outofrange
searchCategoryComboBox.SelectedIndex =counter;
searchObj.Company = searchCompanyComboBox.Text;
searchObj.Category = searchCategoryComboBox.Text;
SearchManager searchMangObj = new SearchManager();
DataTable dt2 = searchMangObj.SearchInfo(searchObj);
searchDataGridView.DataSource = dt2;
textBox1.Text = String.Empty;
【问题讨论】:
好吧。我擦掉了。 【参考方案1】:问题在于您从数据库获取数据的方式:
DataTable dt2 = searchMangObj.SearchInfo(searchObj);
searchDataGridView.DataSource = dt2;
您的 SearchInfo 方法返回一个新的数据表,并且您绑定它,因此前一个表中的行会丢失。修改此方法,使其以数据表为参数(即现有数据表)并向其添加行。
您没有说您的 SearchInfo 如何从数据库中获取行,但我怀疑它会使用 dataadapter 或 tableadapter,在这种情况下,您应该将其 ClearBeforeFill
属性设置为 false
以阻止它清除搜索数据表(数据绑定到 searchdatagridview.DataSource 的表)
然后你会像这样使用它:
searchMangObj.SearchInfo(searchDataGridView.DataSource as DataTable);
它的编码如下:
void SearchInfo(DataTable dt)
var dataadapter = blah blah blah;
dataadapater.ClearBeforeFill = false;
dataadapter.Fill(dt);
【讨论】:
以上是关于从 Datagridview 到其他 datagridview 添加在旧行下的主要内容,如果未能解决你的问题,请参考以下文章
从 Datagridview 到其他 datagridview 添加在旧行下
Form DataGridView绑定BindingSource的几种方式