2016-03-07 53 views
-1

我有一個按鈕點擊,應該抓住所選單元格的值。但是,它只獲取datagrid視圖中的第一個單元格。我不確定這是否是我需要更改或改變的屬性。c#DataGridView,總是隻獲得第一個單元格值

按鈕單擊後,表單將從另一個表單加載。下面是SQL表被加載到DataGridView的:

enter code herepublic void progressView_CellContentClick(object sender, DataGridViewCellEventArgs e) 
    { 
     getSQLJobStatus(); 
    } 

    public void getSQLJobStatus() 
    { 

     string connectionString = @"Data Source=FCMONITOR\AVIDAUTO;Initial Catalog=InterplayWatchFolder;Integrated Security=True"; 
     using (SqlConnection connection = new SqlConnection(connectionString)) 
     { 
      connection.Open(); 
      using (SqlDataAdapter aFiller = new SqlDataAdapter("SELECT [JOB_ID], [WORKFLOW_NAME], [JOB_NAME], [TRANSCODE_TRANSFER_STATUS], [DATE] FROM AVID_WATCH_JOBSTATUS", connection)) 
      { 
       DataTable jobStatusDT = new DataTable(); 
       aFiller.Fill(jobStatusDT); 

       progressView.DataSource = jobStatusDT; 
       connection.Close(); 
      } 

有一個名爲「取消」相同的形式在DataGridView上的按鈕。我正在嘗試從選定的行中獲取JOB_ID值。我用CurrentCell和SelectedRows嘗試過,但仍然只獲得第一個單元格的值。

這裏是我的按鈕點擊當前代碼:

string getJobID = progressView.CurrentCell.Value.ToString(); 
+0

您使用MVVM或代碼隱藏?它是一個Windows應用商店的應用程序? – Flaugzig

+0

這是一個使用Win 7窗體的控制檯應用程序。並且原諒我的無知,因爲我是新手,我不確定你在問MVVM和代碼隱藏問題。 –

+0

_a控制檯應用程序使用Win 7 forms._嗯,現在什麼,控制檯或WinForms?控制檯應用程序沒有按鈕,不能顯示DGV。你真的確定你__選擇了另一個單元嗎?它變藍了嗎? – TaW

回答

0

你可以試試這個:

progressView.SelectedCells[0].Value.ToString() 
+0

它引發此異常:索引超出範圍。必須是非負數且小於集合的大小。 –

+0

設置選擇模式可能有所幫助:'progressView.SelectionMode = DataGridViewSelectionMode.CellSelect;' – irfan

+0

仍然只抓住第一個單元格的值。 –

0

很可能你永遠只能得到第一個單元格的值,因爲那通常是來自用戶鼠標交互的CurrentCell

邏輯流程:

  1. 用戶點擊一個單元格的內容。
  2. CellContentClick觸發getSQLJobStatus
    • 這將更新網格的DataSource
    • 這反過來又重置CurrentCell到細胞[0,0]

您可以通過點擊不同的單元格的內容進行驗證 - 鼠標向下點擊的單元格高亮顯示,在鼠標上第一個單元格現在突出顯示。

用戶仍然可以通過單擊內容以外的單元格或通過Tab,Enter和箭頭鍵在其中導航來聚焦任何其他單元格。但只要你點擊一個單元格的內容來更新源代碼,你就會看到這種行爲。我建議更新progressView.DataSource獨立於源DataGridView及其事件處理程序。

0

我想我想出了一個解決方案。我將SelectionMode更改爲FullRowSelect。出於某種原因,它被自動設置爲ColumnHeaderSelect。

冷也像現在這樣:

string getJobID = progressView.SelectedRows[0].Cells["JOB_ID"].Value.ToString(); 
相關問題