2017-05-24 48 views
0

我是DataTables的新手,並試圖訪問與行和colls相反的單個單元格。我通過findResult 獲取了一系列數據,這些數據來自現有的webService。我現在試圖訪問'Id'列,但用戶將點擊的單個單元格。然後,我將把它存儲在一個var中,以便在課堂上進一步處理。從CellClickEvent從DataTable中獲取個體單元格

我已填充我的數據表如下:

  DataTable ss = new DataTable(); 
      ss.Columns.Add("ID"); 
      ss.Columns.Add("Text"); 
      ss.Columns.Add("Highlight"); 
      ss.Columns.Add("Cursor"); 
      ss.Columns.Add("Description"); 
      ss.Columns.Add("Next"); 

      DataRow row = ss.NewRow(); 
      row["ID"] = findResults[0].Id; 
      row["Text"] = findResults[0].Text; 
      row["Highlight"] = findResults[0].Highlight; 
      row["Cursor"] = findResults[0].Cursor; 
      row["Description"] = findResults[0].Description; 
      row["Next"] = findResults[0].Next; 
      ss.Rows.Add(row); 

      if (txt_Search.Text.Length <= 2 || txt_Search.Text.Length >= 9) 
      { MessageBox.Show("Please enter more than 2 Chars!!"); } 

      foreach (DataRow itemDrow in ss.Rows) 
      { 

       foreach (var item in findResults) 
       { 
        var num = dataGridView1.Rows.Add(); 
        dataGridView1.Rows[num].Cells[0].Value = item.Id.ToString(); 
        dataGridView1.Rows[num].Cells[1].Value = item.Text.ToString(); 
        dataGridView1.Rows[num].Cells[2].Value = item.Highlight.ToString(); 
        dataGridView1.Rows[num].Cells[3].Value = item.Cursor.ToString(); 
        dataGridView1.Rows[num].Cells[4].Value = item.Description.ToString(); 
        dataGridView1.Rows[num].Cells[5].Value = item.Next.ToString(); 
       } 
      } 

這是怎麼我試圖acheive我的單擊事件但它只是返回varaible「ID」,而不是regestering的第一行和科爾我點擊了另一個單元格。

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     foreach (DataGridViewRow row in dataGridView1.SelectedRows) 
     { 
      string value1 = row.Cells[0].Value.ToString(); 
      string value2 = row.Cells[1].Value.ToString(); 
      string SerachId = findResults[0].Id.ToString(); 
      Console.WriteLine(SerachId); 
      //... 
     } 

回答

0

CellClick事件的DataGridViewCellEventArgs暴露了兩個屬性:ColumnIndexRowIndex它會告訴你用戶點擊其中的細胞。一旦你有DataGridViewCell得到Value很容易。

例子:

var clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex]; 
var value = clickedCell.Value; 
+0

歡呼聲讓我獲得了coll和row的索引,但是如何使用索引來訪問特定單元格內的數據呢?我應該使用for循環來通過?這是我回來在我的輸出DataGridViewTextBoxCell {ColumnIndex = 0,RowIndex = 5} – whatdoyouNeedFromMe

+0

@whatdoyouNeedFromMe使用Value屬性。 – Kempeth

+0

乾杯已經發現它謝謝你的回答是非常有用的 – whatdoyouNeedFromMe

0

周圍有一個小遊戲,並使用@Kempeths響應我解決了這個問題,具體如下,這個現在打印出的信息,在每個細胞中,多數民衆贊成雙擊了感謝:

public void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e) 
    { 
     var clickedCell = dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; 
     if (clickedCell != null) 
     { 
      MessageBox.Show(dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString()); 
      string SerachId = clickedCell.ToString(); 
     }