C# 如何扫描DataGridView中的值/行
这其实是我第一次问。我试着搜索所有的东西,但是我找不到答案 我想扫描DataGridView中的所有值,以防止从一开始就重复。我正在使用Access作为我的数据库。到目前为止,我只能选中选中的行,然后将其与文本框进行比较。如果textbox值在所有数据中具有类似的项名称,我需要禁用“Add” 这是我的密码。它只影响选定的行。不是所有的行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
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
循环,aforeach
循环,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";
}