加载对话框后重置数据网格视图的选定行

本文关键字:视图 网格 对话框 置数据 加载 | 更新日期: 2023-09-27 18:32:18

我有一个对话框,它基于System.Windows.Forms.Form.它包含一个控制DataGridView。我填写此DataGridView,然后选择任何行。后来称我为我表单的方法ShowDialog。表单出现后,我可以看到选定的第一行DataGridView,但我想要的行没有被选中。如何解决此问题?我不希望在方法中选择OnLoad

下面是我的代码。

DgvDataSource dgvDs = new DgvDataSource(); 
DgvForm dgvF = new DgvForm();
dgvF.DataSource = dgvDs; 
dgvF.SelectRows(new int[] { 3, 5, 7, 9, 10}); dgvF.ShowDialog();
 public class DgvForm : Form 
 {
    public DgvForm()
    {
        InitializeComponent();
    }
    DgvDataSource dataSource;
    public DgvDataSource DataSource
    {
        get { return myDataGridView.DataSource; }
        set
        {
            myDataGridView.DataSource = value;
        }
    }
    public void SelectRows(int[] indexes)
    {
        myDataGridView.ClearSelection();
        foreach (DataGridViewRow r in dataGridView1.Rows)
        {
            r.Cells[0].Selected = indexes.Contains(r.Index);
        }
    } 
}
public class DgvDataSource
{
    public BindingList<DgvItem> Items { get; private set; }
    public DgvDataSource()
    {
        InitItems();
    }
    void InitItems()
    {
        Items = new BindingList<DgvItem>();
        for (int i = 0; i < 20; i++)
        {
            Items.Add(new DgvItem() { Id = i + 1, 
                                        Description = "Description " + (i+1).ToString() });
        }
    }
}
public class DgvItem
{
    public int Id { get; set; }
    public string Description { get; set; }
}

加载对话框后重置数据网格视图的选定行

将 SelectRows 放在对话框窗体的加载事件中。创建实例时,设置 int[] 属性:

 DgvForm dgvF = new DgvForm();
 //this property should be in the Dialog Form 
 dgvF.Selection = new int[] { 3, 5, 7, 9, 10}; 
 dgvF.ShowDialog();


Luego en el Form:

private int[] selection;
public int[] Selection
{
get { return selection; }
set { selection = value; }
}
private void Form1_Load(object sender, EventArgs e)
{
//Put your code here, to load DataSource and Select Rows.
}