2010-08-20 40 views
6

Tôi có một hình thức DataGridView và tôi muốn lập trình nhấp vào hàng đầu tiên của nó. Tôi đã tìm thấy mã để chọn các hàng hoặc cột của nó từ mã.Tôi muốn lập trình tạo nhấp chuột trên Hàng DataGridView trong C#

Ví dụ:

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

Tuy nhiên mã này không nâng cao click event trên chế độ xem dữ liệu. Nếu bất kỳ ai đã mã hóa cách nhấp vào một chế độ xem dữ liệu từ mã, vui lòng mở rộng trợ giúp loại của bạn.

+2

Tôi chắc chắn tôi không hiểu câu hỏi của bạn một cách chính xác ... nhưng tôi sẽ stil hỏi - Tại sao không chỉ cần gọi nhấp chuột phương pháp eventhandler của bạn trực tiếp? – InSane

+0

Xin cảm ơn các bạn, mã này hoạt động như sự quyến rũ. –

Trả lời

11

Đơn giản chỉ cần gọi phương thức xử lý sự kiện ví dụ .:

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

Nếu bạn sử dụng các thông số gửi hoặc e trong xử lý sự kiện sau đó bạn sẽ cần phải làm việc ra làm thế nào để vượt qua trong các giá trị chính xác.

2

Dường như bạn có nửa đầu tiên, đặt giá trị của hàng propers Selected giá trị thành true. Bây giờ bạn có thể lập trình gọi trình xử lý nhấp chuột hàng và nó sẽ tiến hành như thể bạn đã nhấp vào nó trong GUI.

7

Chèn mã follwing vào dự án của bạn khi thích hợp (Thông thường trên biểu mẫu có chế độ xem dữ liệu).
Đảm bảo thay đổi tên của DataGridView từ dataGridView1 thành tên phù hợp trên biểu mẫu của bạn.

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; 

Nó làm cho tìm kiếm hàng như chọn nhưng nó sẽ không thay đổi dataGridView.CurrentRow. Vì vậy, nó có thể là một vấn đề.

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

cũng sẽ thay đổi giá trị CurrentRow.

Hy vọng nó sẽ giúp.

0

Tôi giả sử bạn muốn áp dụng DataSource và chọn hàng đầu tiên? Đúng?

Cách tốt nhất để làm điều đó như thế này

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

} 

Và đây là đoạn code để mô phỏng bấm vào liên tiếp.

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

Trong trường hợp của tôi, tôi có 3 DataGridView s vì vậy tôi điền số đầu tiên một cách dễ dàng. Điều thứ hai tôi điền khi người dùng nhấp vào DataGridView đầu tiên và trong trường hợp này tôi sử dụng sự kiện DgvStaff_RowStateChanged.

Và trong trường hợp này DgvStaff_RowStateChanged Tôi có đoạn code để lấy dữ liệu async và cư trú trong ba DataGridView và sau khi tôi áp dụng nguồn dữ liệu cho phần thứ hai DataGridView tôi cần để có được dữ liệu cho hàng đầu tiên của quan điểm này và hiển thị nó trong thứ ba DataGridView. Đó là logic ghép tầng.

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); 
      } 
     } 

Và đây

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); 
      } 
     } 
Các vấn đề liên quan