Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何扫描DataGridView中的值/行_C#_Database_Ms Access_Datagridview - Fatal编程技术网

C# 如何扫描DataGridView中的值/行

C# 如何扫描DataGridView中的值/行,c#,database,ms-access,datagridview,C#,Database,Ms Access,Datagridview,这其实是我第一次问。我试着搜索所有的东西,但是我找不到答案 我想扫描DataGridView中的所有值,以防止从一开始就重复。我正在使用Access作为我的数据库。到目前为止,我只能选中选中的行,然后将其与文本框进行比较。如果textbox值在所有数据中具有类似的项名称,我需要禁用“Add” 这是我的密码。它只影响选定的行。不是所有的行 string item = dgvInventory.Rows[dgvInventory.CurrentRow.Index].Cells[0].Value.To

这其实是我第一次问。我试着搜索所有的东西,但是我找不到答案

我想扫描DataGridView中的所有值,以防止从一开始就重复。我正在使用Access作为我的数据库。到目前为止,我只能选中选中的行,然后将其与文本框进行比较。如果textbox值在所有数据中具有类似的项名称,我需要禁用“Add”

这是我的密码。它只影响选定的行。不是所有的行

string item = dgvInventory.Rows[dgvInventory.CurrentRow.Index].Cells[0].Value.ToString();
            if (tbItem.Text == item)
            {

                btnAdd.Enabled = false;
                lblAdd.Text = "Item name cannot be the same";
            }
            else
            {
                btnAdd.Enabled = true;
                lblAdd.Text = "Accepted";
            }
请帮忙? 我试图为循环插入一个
,因此这是我现在的代码,但它只发生在最后一行。我错过了什么?或者我犯了什么错误

for (int x = 0; x < dgvInventory.Rows.Count; x++)
            {
                string item = dgvInventory.Rows[x].Cells[0].Value.ToString();
                if (tbItem.Text == item)
                {

                    btnAdd.Enabled = false;
                    lblAdd.Text = "Item name cannot be the same";
                }
                else
                {
                    btnAdd.Enabled = true;
                    lblAdd.Text = "Accepted";
                }
            }
for(int x=0;x
编辑:注意:如果这是您要查找的内容,但不完整,我可以引导/完成代码

使用:

验证所有行:

public bool VerifyAllRows(string pValue)
{
    foreach (DataGridViewRow row in dgvInventory.Rows)
    {
        if (!VerifyRow(row,pValue))
        {
            return false;
        }
    }
    return true;
}
验证行:

public bool VerifyRow(DataGridViewRow pRow,string pValue)
{
    foreach (DataGridViewCell cell in pRow.Cells)
    {
        string currentItem = cell.Value.ToString();
        if (currentItem == pValue)
        {
            return false;
        }
    }
    return true;
}

您可以这样做,在
DataGridView
行上使用
foreach
循环:

bool found = false;
foreach (DataGridViewRow dgvr in dgvInventory.Rows)
{
    if (tbItem.Text == dgvr.Cells[0].Value.ToString())
    {
        found = true;
        break;
    }
}

if (found)
{
       btnAdd.Enabled = false;
       lblAdd.Text = "Item name cannot be the same";
}
else
{
       btnAdd.Enabled = true;
       lblAdd.Text = "Accepted";
}

您可以对
循环执行
,然后在那里添加条件。类似这样的
for(int i=0;ifor
循环,a
foreach
循环,Linq..。@P.Pat谢谢你的建议。我尝试了
(int x=0;x
然后
string item=dgvInventory.Rows[x]。单元格[0]。Value.ToString()不知怎么的,它只在最后一行起作用调试代码,您将看到它不仅在最后一行起作用。问题是,您正在每行上设置
,因此最终得到最后一行值。您需要检查该值是否与您在for循环中查找的值相同。我想这不是OP所查找的。这会检查所选行中的列,OP想检查每一行中的列是的,这是一般的想法-但是一旦你有了一个测试行的方法,迭代它来测试所有的行-如果这是OP想要的,我可以引导/完成代码。谢谢你的建议,但我正在尝试扫描所有的行。并检查文本框中是否已包含相同的文本datagridview@OriNachum是 啊我找不到测试/检查所有行的方法。我只能管理选定的行,不知道如何管理。我被困了很长时间这有意义吗?如果您可以访问网格,而不仅仅是特定的行,那么您可以迭代这些行。编辑:请注意,使用[0]只测试行中的第一个单元格。(除非那是你想要的)这奏效了!。但是我必须编辑一些东西,比如
dgvr.Cells[0].Value.toString()
,但是你基本上解决了它是的,我忘记了
toString
。很高兴这有帮助:)
bool found = false;
foreach (DataGridViewRow dgvr in dgvInventory.Rows)
{
    if (tbItem.Text == dgvr.Cells[0].Value.ToString())
    {
        found = true;
        break;
    }
}

if (found)
{
       btnAdd.Enabled = false;
       lblAdd.Text = "Item name cannot be the same";
}
else
{
       btnAdd.Enabled = true;
       lblAdd.Text = "Accepted";
}