簡體   English   中英

Datagridview比較單元格字符串

[英]Datagridview compare cell string

我需要比較一個單元格中的 2 個字符串值。(如果單元格 1 中的字符串像“DPS”和“MAN”)但我不知道為什么我的 && 運算符不像我想的那樣工作。 我沒有得到結果。

在此處輸入圖像描述

有人可以解釋我在這里做錯了什么嗎?

private void Warning()
{
    foreach (DataGridViewRow row in dataGridView4.Rows)
        if (row.Cells[1].Value.ToString() == "DPS" 
            && row.Cells[1].Value.ToString() == "MAN")
        {
            panelWarnung.BackColor = Color.Red;
        }
        else
        {
            panelWarning.BackColor = Color.LightGreen;
        }
}

解決方案

這行得通!

foreach (DataGridViewRow row in dataGridView4.Rows)
            if (row.Cells[1].Value.ToString().Contains("DPS") == row.Cells[1].Value.ToString().Contains("MAN"))
                panelWarning.BackColor = Color.Red;

我已取消刪除此答案,因為自從看到您的屏幕截圖后,我意識到它實際上非常相關


此答案適用於某行上的單元格是否有 MAN 或另一行上的另一個單元格中是否有 DPS

例如,像這樣的單元格:

MAN  
ext
DPS  
wow
MAN  
MAN  

這通常是一個心理學問題,我懷疑來自人們談論 collections 事物時的說話方式:

從這個盒子里取出所有的紅色和綠色水果

如果你把這個任務交給一個人,他們可能會給你一把紅色水果和一把綠色水果。

..但這實際上是“或”

看看這個盒子,如果一個水果是紅色的或者是綠色的,把它拿出來給我

我們已經根據每個單獨的水果提出了請求,這意味着它不再使用“and”了:

看看這個盒子,如果一個水果是紅色的如果它是綠色的,把它拿出來給我

C# 將逐行考慮您的行,如果您希望 MAN 行為紅色並且您還希望 DPS 行為紅色,那么您需要使用|| 或者。 從人類的角度來看,當您說“MAN 是紅色的,DPS 是紅色的”時,您正在使用整個系列。但是當您單獨處理項目時,您不能說“如果它是 MAN 和 DPS,請制作它是紅色的”.. 你說“如果它是 MAN 或它的 DPS;讓它變成紅色”

相反,您需要:

row.Cells[1].Value.ToString() == "DPS" || row.Cells[1].Value.ToString() == "MAN")
                                       ^^
                                 note the OR, not AND

總的來說,我推薦以下代碼:

private void Warning()
{
    panelWarning.BackColor = Color.LightGreen;
    foreach (DataGridViewRow row in dataGridView4.Rows)
        if (row.Cells[1].Value.ToString()== "DPS" || row.Cells[1].Value.ToString() == "MAN")
            row.Cells[1].Style.BackColor = panelWarnung.BackColor = Color.Red;
        else
            row.Cells[1].Style.BackColor = Color.White;
}

如果它們是 MAN 或 DPS,這會將任何單個單元格點亮為紅色,並且警告面板為紅色

如果 DPS 和 MAN 在單元格中,則警告面板應變為紅色

那是

row.Cells[1].Value.ToString().Contains("DPS") 
    && row.Cells[1].Value.ToString().Contains("MAN")

Contains測試字符串是否存在於單元格內的某處。 ==測試單元格中的整個字符串是否完全等於某個值。並且沒有變量可以同時等於兩個不同的值

包含將允許您擁有單元格值,例如:

MANDPS
DPS,MAN
DPSINGH'S MANAGER

:)

針對以下評論更改了答案:

foreach (DataGridViewRow row in dataGridView4.Rows)
    if (row.Cells[1].Value.ToString().Contains("DPS")
            && row.Cells[1].Value.ToString().Contains("MAN")) {
        panelWarnung.BackColor = Color.Red;
        break; // <-- NB: Stop the loop after the first invalid cell!
    }

現在,如果 DPS 和 MAN包含在其中一個單元格中,則您的面板應該設置為指定的顏色。

但是請注意,您還需要在將顏色設置為紅色后添加break語句,否則您可能會為下一個正確的行覆蓋它並設置為 gre。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM