2010-08-20 40 views
6

我在表單中有一個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

回答

11

只需調用事件處理方法例如爲:

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

2

它看起來像你的前半部分,將行數Selected的值設置爲true。現在,您可以通過編程方式調用行單擊處理程序,並且應該像在GUI中單擊它一樣繼續。

7

將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 
} 
0
datagridview.Columns[0].Selected = true; 
datagridview.Rows[0].Selected = true; 

它使看起來像行選擇,但它不會改變dataGridView.CurrentRow。所以這可能是一個問題。

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

也會改變CurrentRow的值。

希望它會有所幫助。

0

我假設你想申請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); 
      } 
     }