我想以编程方式在C#中生成一个DataGridView行的单击

时间:2010-08-20 16:05:13

标签: c# .net datagridview

我在表单中有一个DataGridView,我想以编程方式点击它的第一行。我找到了从代码中选择行或列的代码。

例如。

datagridview.Columns[0].Selected = true;
datagridview.Rows[0].Selected = true;

但是,此代码不会在datagridview上引发click event。如果有人编码了如何从代码中点击数据网格视图,请扩展您的帮助。

5 个答案:

答案 0 :(得分:12)

只需调用事件处理程序方法,例如:

datagridviewRowClickedEventHandler(new object(), new eventargs());

如果您在事件处理程序中使用sender或e参数,那么您将需要确定如何传递正确的值。

答案 1 :(得分:10)

在适当的时候将以下代码插入到项目中(通常在具有datagridview的表单上) 确保将DataGridView的名称从 dataGridView1 更改为表单上的相应名称。

private void Form1_Load(object sender, EventArgs e)
{
    //call the cell click event with the first cell as the parameters.
    dataGridView1_CellClick(dataGridView1, new DataGridViewCellEventArgs(0, 0));
}

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
    //put your code for handling cell click here
}

答案 2 :(得分:2)

看起来你有上半部分,将propers行Selected值设置为true。现在,您可以以编程方式调用行单击处理程序,它应该像在GUI中单击它一样继续。

答案 3 :(得分:0)

datagridview.Columns[0].Selected = true;
datagridview.Rows[0].Selected = true;

它会使行看起来像选中但不会改变dataGridView.CurrentRow。所以这可能是一个问题。

dataGridView.CurrentCell = dataGridView[<column>, <row>];

也会更改CurrentRow值。

希望它会有所帮助。

答案 4 :(得分:0)

我假设你想申请DataSource并选择第一行?正确?

这样做的最好方法

private async void DgvAreas_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
{

}

这是模拟点击行的代码。

DgvAreas_RowStateChanged(dgvAreas, new DataGridViewRowStateChangedEventArgs(dgvAreas.Rows[0],  DataGridViewElementStates.Selected));

在我的情况下,我有3 DataGridView s,所以我很容易填充第一个。{ 我在用户点击第一个DataGridView时填充的第二个,在这种情况下,我使用DgvStaff_RowStateChanged事件。

在此事件中DgvStaff_RowStateChanged我有代码来获取数据异步并填充第三个DataGridView并在我为第二个DataGridView应用数据源之后我需要获取此视图第一行的数据并将其显示在第三行DataGridView中。 是级联逻辑

private async void DgvStaff_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            try
            {
                // For any other operation except, StateChanged, do nothing
                if (e.StateChanged != DataGridViewElementStates.Selected) return;

                if (sender is MetroFramework.Controls.MetroGrid)
                {
                    if ((sender as MetroFramework.Controls.MetroGrid).SelectedRows.Count > 0)
                    {
                        dgvGeoData.DataSource = null;
                        dgvAreas.DataSource = null;

                        metroProgressSpinnerMain.Visible = true;
                        panelFilter.Enabled = false;

                        dgvAreas.RowStateChanged -= DgvAreas_RowStateChanged;

                        var selectedRow = (sender as MetroFramework.Controls.MetroGrid).SelectedRows[0];
                        var machineModelShortView = (MachineModelShortView)selectedRow.DataBoundItem;

                        var startTime = Convert.ToDateTime(dateTimePickerStart.Value.ToShortDateString());
                        var endTime = Convert.ToDateTime(metroDateTimeEnd.Value.ToShortDateString());
                        var areas = await UpdateAreaItems(machineModelShortView.MachineID, startTime, endTime);

                        if (areas.Any())
                        {
                            BeginInvoke((Action)(() =>
                            {
                                dgvAreas.DataSource = areas.OrderBy(x => x.AreaID).ThenBy(x => x.TimeStart).ToList();
                                dgvAreas.RowStateChanged += DgvAreas_RowStateChanged;

                                // !!! This is how you simulate click to the FIRST ROW dgvAreas.Rows[0]
                                DgvAreas_RowStateChanged(dgvAreas, 
                                    new DataGridViewRowStateChangedEventArgs(dgvAreas.Rows[0],  DataGridViewElementStates.Selected));

                                metroProgressSpinnerMain.Visible = false;
                                panelFilter.Enabled = true;
                            }));
                        }
                        else
                        {
                            BeginInvoke((Action)(() =>
                            {
                                metroProgressSpinnerMain.Visible = false;
                                panelFilter.Enabled = true;
                            }));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
        }

在这里

   private async void DgvAreas_RowStateChanged(object sender, DataGridViewRowStateChangedEventArgs e)
        {
            try
            {
                // For any other operation except, StateChanged, do nothing
                if (e.StateChanged != DataGridViewElementStates.Selected) return;

                //Get GeoData
                if (sender is MetroFramework.Controls.MetroGrid)
                {
                    if ((sender as MetroFramework.Controls.MetroGrid).SelectedRows.Count > 0)
                    {
                        dgvGeoData.DataSource = null;
                        metroProgressSpinnerMain.Visible = true;
                        panelFilter.Enabled = false;

                        var selectedRow = (sender as MetroFramework.Controls.MetroGrid).SelectedRows[0];
                        var areaItem = (AreaItem)selectedRow.DataBoundItem;
                        var geoData = await UpdateWDataPositionItems(areaItem.MachineID, areaItem.TimeStart, areaItem.TimeEnd.Value);

                        if (geoData.Any())
                        {
                            BeginInvoke((Action)(() =>
                            {
                                dgvGeoData.DataSource = geoData.OrderBy(x => x.AtTime).ToList();
                                metroProgressSpinnerMain.Visible = false;
                                panelFilter.Enabled = true;
                            }));
                        }
                        else
                        {
                            BeginInvoke((Action)(() =>
                            {
                                metroProgressSpinnerMain.Visible = false;
                                panelFilter.Enabled = true;
                            }));
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex);
            }
        }