我的页面上有一个datagridview,其数据源根据使用2个组合框中的值对检索的记录不断变化, 我需要在我的数据网格中添加一个复选框列,该数据网格与数据库表中的任何列都没有数据绑定,我正在使用此代码
public void RefreshDataGrid(string query)
{
Buisness_logic bl = new Buisness_logic();
dataGridView1.DataSource = bl.GetDataTable(query);
SetUpDataGridView();
dataGridView1.ClearSelection();
}
public void SetUpDataGridView()
{
DataGridViewCellStyle style = dataGridView1.ColumnHeadersDefaultCellStyle;
style.BackColor = Color.White;
style.ForeColor = Color.Black;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
dataGridView1.RowHeadersVisible = false;
dataGridView1.Columns[0].HeaderText = "Sr.No";
dataGridView1.Columns[0].Width = 50;
dataGridView1.Columns[1].HeaderText = "Rate";
dataGridView1.Columns[1].Width = 70;
dataGridView1.Columns[2].HeaderText = "Amount";
dataGridView1.Columns[2].Width = 100;
dataGridView1.Columns[3].HeaderText = "Mode";
dataGridView1.Columns[3].Width = 60;
dataGridView1.Columns[4].HeaderText = "Support";
dataGridView1.Columns[4].Width = 80;
dataGridView1.Columns[5].HeaderText = "Team1";
dataGridView1.Columns[5].Width = 100;
dataGridView1.Columns[6].HeaderText = "Team2";
dataGridView1.Columns[6].Width = 100;
dataGridView1.Columns[7].HeaderText = "Team3";
dataGridView1.Columns[7].Width = 100;
DataGridViewCheckBoxColumn column3 = new DataGridViewCheckBoxColumn();
column3.Name = "Column3";
column3.HeaderText = "IsCheck";
column3.ReadOnly = false;
dataGridView1.Columns.Add(column3);
}
当tge表单第一次加载时,datagridview很好,但是当我更改组合框的值并且数据源发生变化时,列会搞砸,并且没有。的复选框列被添加并且会破坏我的表单,
这是我用来从表中检索记录的代码
Combo_pair pr1 = combo_match_code.SelectedItem as Combo_pair;
int match_code_f1 = Convert.ToInt32(pr1.Text);
Combo_pair pair = combo_name.SelectedItem as Combo_pair;
int userid_f1 = Convert.ToInt32(pair.Value);
string query = "Select int_sr_no,double_rate,double_amount,txt_mode,txt_support,double_team1,double_team2,double_team3 from match_transaction where int_match_code='" + match_code_f1 + "' AND int_user_id='" + userid_f1 + "' AND is_deleted=0";
RefreshDataGrid(query);
这是第一次加载表单时的图像
这是我更改组合框值几次后的图像
*(抱歉,图片有问题)
我真的需要一些帮助,比这些
答案 0 :(得分:0)
您只需要设置一次gridview。
执行此操作的好地方是InitializeComponent()
之后。
由于这是一个固定列,您还可以通过设计器(编辑列)添加它。
这样代码就会添加到InitializeComponent()
。
InitializeComponent()
通常在表单的构造函数中调用。
目前您正在添加此行
dataGridView1.Columns.Add(column3);
将导致复选框列多次添加。
答案 1 :(得分:0)
在回答之前,我只是按步骤重述问题(以便我的解决方案更有意义):
简而言之,问题是如何保持对列的更改,同时只有一列?
这里的技巧是DataGridView的AutoGenerateColumns属性。
为了论证,我们假设您首先在表单加载期间设置网格 - 如果没有,那么如果您之前已经设置了网格,则可能需要一个布尔字段来存储。
public Form1()
{
InitializeComponent();
// So this is the first time we call your refresh grid with some default string query
RefreshDataGrid(query);
// Now one time only we call SetUpDataGridView()
SetUpDataGridView();
// Now once we have done that we set AutoGenerateColumns to false
dataGridView1.AutoGenerateColumns = false;
}
public void RefreshDataGrid(string query)
{
Buisness_logic bl = new Buisness_logic();
dataGridView1.DataSource = bl.GetDataTable(query);
// We no longer need to call SetUpDataGridView()
// SetUpDataGridView();
dataGridView1.ClearSelection();
}
你的SetUpDataGridView()方法完全相同:
public void SetUpDataGridView()
{
DataGridViewCellStyle style = dataGridView1.ColumnHeadersDefaultCellStyle;
style.BackColor = Color.White;
style.ForeColor = Color.Black;
dataGridView1.EditMode = DataGridViewEditMode.EditProgrammatically;
dataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None;
dataGridView1.RowHeadersVisible = false;
dataGridView1.Columns[0].HeaderText = "Sr.No";
dataGridView1.Columns[0].Width = 50;
// And so on for all the columns...
dataGridView1.Columns[7].Width = 100;
DataGridViewCheckBoxColumn column3 = new DataGridViewCheckBoxColumn();
column3.Name = "Column3";
column3.HeaderText = "IsCheck";
column3.ReadOnly = false;
dataGridView1.Columns.Add(column3);
}
所以现在当包含查询信息的组合框发生变化时,您可以调用RefreshDataGrid(),但它只会更新数据,而不会更改您的自定义设置。
RefreshDataGrid()方法的一个建议是添加如下所示的行:
public void RefreshDataGrid(string query)
{
Buisness_logic bl = new Buisness_logic();
// This is the new line
dataGridView1.DataSource = typeof(List<>);
dataGridView1.DataSource = bl.GetDataTable(query);
// We no longer need to call SetUpDataGridView()
// SetUpDataGridView();
dataGridView1.ClearSelection();
}
这可以减少列宽变化时的闪烁,并且通常也需要更改DataSource节目。