从 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 行列的隐藏和删除

C# excel文件导入导出

从 Datagridview 到其他 datagridview 添加在旧行下

Form DataGridView绑定BindingSource的几种方式

DataGridView使用技巧十一:DataGridView用户输入时,单元格输入值的设定

vb中datagrid控件怎么更新?