2016-03-07 70 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(); 
相关问题