2013-11-20 37 views
0

您好,我是新來的LINQ查詢,而這個代碼是從網上如何從TextBox在DataGridView中查找字符串?

 object cells = from r in dataGridView1.Rows.Cast<DataGridViewRow>()where !r.IsNewRowArray.ConvertAll<DataGridViewCell, string>(r.Cells.Cast<DataGridViewCell>().ToArray, dgvc => dgvc.Value.ToString)where c.Contains(textBox1.Text) 
          select new cell { 
          rowIndex = r.Index, 
          columnIndex = Array.IndexOf(c, _textBox1.Text)}; 

,並通過使用下面的代碼我正在fiding在一個DataGridView單元格中字符串複製。

object cells = from r in dataGridView1.Rows.Cast<DataGridViewRow>()where !r.IsNewRowArray.ConvertAll<DataGridViewCell, string>(r.Cells.Cast<DataGridViewCell>().ToArray, dgvc => dgvc.Value.ToString)where c.Contains(_txt) 
          select new cell { 
          rowIndex = r.Index, 
          columnIndex = Array.IndexOf(c, _txt) 
}; 

foreach (DataGridViewRow r in dataGridView1.Rows.Cast<DataGridViewRow>()) { 
    foreach (DataGridViewCell c in r.Cells.Cast<DataGridViewCell>()) { 
     if (!r.IsNewRow) { 
      c.Style.BackColor = Color.White; 
     } 
    } 
} 

foreach (object c_loopVariable in cells) { 
    c = c_loopVariable; 
    DataGridView1.Rows(c.rowIndex).Cells(c.columnIndex).Style.BackColor = Color.Red; 
} 

並改變該單元格的顏色。

我想找到datagridview中的第一個空單元格(12列和8行),我的datagridview由列明智填充。當它進入到第8行就自動進入下一欄,代碼編寫below.Where _col和_row是全球

 dataGridView1[_col, _row].Value = lvI.Text; 
       _row = _row + 1; 
       if (_row == 8) 
       { 
        _row = 0; 
        _col = _col + 1; 
       } 

聲明實際上我是從列表視圖填充datagridview的。當我檢查列表視圖項時,datagridview基於列明智填充。當我取消選中它將清除包含該文本的datagridview單元格。

我可以後取消選中顯示我的DataGridView的圖片爲更好地理解

enter image description here

它會是這樣

enter image description here

+0

什麼問題? –

+0

'System.Windows.Forms.DataGridViewRow'不包含'IsNewRowArray'的定義,並且沒有找到接受'System.Windows.Forms.DataGridViewRow'類型的第一個參數的擴展方法'IsNewRowArray'指令或程序集引用?) – Anjali

+0

@Anjali使用'IsNewRow'而不是 –

回答

1

如果你想獲得含有部分中的所有單元文本,試試這個代碼,你的舊查詢有一些依賴關係,你錯過了那部分。

var cells = dataGridView1.Rows.Cast<DataGridViewRow>() 
      .SelectMany(row=>dataGridView1.Columns.Cast<DataGridViewColumn>() 
           .Select(col=>row.Cells[col.Name])) 
      .Where(cell=>Convert.ToString(cell.Value).Contains(textBox1.Text)); 

cellsIEnumerable<DataGridViewCell>

然後改變BackColor可以是這樣的代碼:

foreach (var cell in cells) { 
    cell.Style.BackColor = Color.Red; 
} 

注意,你複製的代碼是沒用的。

爲了得到第一個空單元格,你做的一樣,但與不同的條件是這樣的:

var firstEmptyCell = dataGridView1.Rows.Cast<DataGridViewRow>() 
        .SelectMany(row=>dataGridView1.Columns 
            .Cast<DataGridViewColumn>() 
            .Select(col=>row.Cells[col.Name])) 
        .OrderBy(cell=>cell.ColumnIndex) 
        .ThenBy(cell=>cell.RowIndex) 
        .FirstOrDefault(cell=>Convert.ToString(cell.Value) == ""); 
//The value of firstEmptyCell may be null if there is not any empty cell 
+0

我想要單元號 – Anjali

+0

@Anjali每個'DataGridViewCell'都有一個名爲'RowIndex'的屬性。正如我所說的'cells'是一個'IEnumerable ',所以你可以完全訪問每個單元的信息。 –

+0

你能告訴我如何在datagridview中找到第一個空單元格嗎? – Anjali