检查Datatable中的现有值

时间:2010-12-17 07:26:19

标签: c# asp.net

                if (dt.Rows[i]["Code"] == code)
                {

                    Label lblLang = (Label)(((e.Item as GridItem).FindControl("lblLang") as Label));
                    lblLang.Visible = true;

                }
                else
                {

                }
            }

我在上面的代码中添加了一种新语言Fr-FR。 fr-FR已存在于我的DB语言表中。我不想在表格中添加重复的值。应该只有一个fr-FR。 我在上面的代码中做错了什么?

2 个答案:

答案 0 :(得分:3)

您是否尝试过使用

dt.Rows[i]["Code"] .Equals(code, StringComparison.InvariantCultureIgnoreCase) 

查看StringComparison Enumeration甚至String.Compare Method (String, String, Boolean)

答案 1 :(得分:2)

让我们稍微分析一下代码:

如果db

中有两行
Code    Name
------------
En-en   English
De-de   German
Fr-fr   French
  1. 代码将首先获得“en”行。
  2. 这是否等于“fr” -
  3. 执行else(插入另一个fr)
  4. 获取“de”
  5. 这是否等于“fr” -
  6. 执行else(插入另一个fr) ...
  7. 如您所见,您正在插入一个fr-fr行,用于 real fr行之前的所有行。

    你应该做这样的事情

    bool found = false;
    for (int i = 0; i < dt.Rows.Count; i++)
    {
      if (dt.Rows[i]["Code"] == code)
      {
        found = true;
        break;
      }
    }
    
    if (found)
    {
      //show the label
    }
    else
    {
      //add the language
    }
    

    基本上确保在关闭和插入行之前,任何行中都不存在“fr”。


    要显示网格中一行中单元格中的标签,您需要找到该单元格,然后使用FindControl查找标签,如下所示(伪代码):< / p>

    Label lblLang = (Label)((e.Item as GridItem).Cells[0].FindControl("lblLang"))
    

    上面的代码很可能无效,因为您需要根据问题进行调整,但方向正确。