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

问题描述:

我在表单中有一个DataGridView,我希望以编程方式单击它的第一行。我发现代码从代码中选择它的行或列。我想以编程方式在C#中的DataGridView行上生成一个单击#

例如,

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

但是,这段代码没有引发datagridview上的click event。如果任何人编码了如何从代码中点击datagridview,请扩展您的善意帮助。如果你使用发件人或E参数在事件处理程序,那么你将需要解决如何在正确的价值观传递

+2

我相信我没有正确理解你的问题......但我会问还是老样子 - 为什么不干脆直接打电话给你的点击事件处理方法? – InSane 2010-08-20 16:09:22

+0

谢谢你们,这段代码就像魅力一样。 – 2010-08-20 17:16:04

只需调用事件处理方法例如为:

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

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

将follwing代码插入项目中(通常在具有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 
} 

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

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

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

也会改变CurrentRow的值。

希望它会有所帮助。

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

做这样

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

} 

在这里,最好的办法是模拟点击一行代码。

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

在我来说,我有3个DataGridView这么填充我的第一个伊斯利。 第二个我填充时,用户单击第一个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); 
      } 
     }