【问题标题】:Find a row in a DataTable在 DataTable 中查找一行
【发布时间】:2012-09-29 21:11:35
【问题描述】:

我在 DataSet 中有一个表,我想使用唯一键在此表中搜索一行。

我的问题是:有没有什么方法可以让我在不使用循环的情况下找到这一行?

这是我使用 forech 循环编写的代码:

foreach (var myRow in myClass.ds.Tables["Editeur"].AsEnumerable())
{
     if (newKeyWordAEditeurName == myRow[1] as String)
         id_Editeur_Editeur = (int)myRow[0];
}

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    当然。您有一个 DataTable 的 Select 方法。从您的 DataSet 中获取表,并使用 Select 来获取它。

    void Demo(DataSet ds)
    {
        DataTable dt = ds.Tables[0]; // refer to your table of interest within the DataSet
    
        dt.Select("Field = 1"); // replace with your criteria as appropriate
    }
    

    【讨论】:

    • Select 方法是否返回 DataRow ?因为当我无法将其转换为 Int32
    • 是的,Select 返回一个 DataRow 对象数组 (DataRow[])。每行中的列包含 Select 返回的每条记录中的字段。
    • 但我只想得到一行,因为我用来搜索这一行的字段是唯一的
    • 我试过这个:var myRow = myClass.ds.Tables["Editeur"].Select(String.Format("ID = {0}", "test")); id_Editeur_Editeur = (int)myRow[0][0]; 但我得到了这个错误:Cannot find the column [test]
    • 你的select语句的格式不太对。您需要在目标字段周围加上引号,例如 String.Format("ID = ""{0}""","test");。如果没有引号,Select 会将单词“test”解释为列名,该列名不在您的结果集中。这就是您想要从 ID 列获得的
    【解决方案2】:

    要查找特定行,您可能需要按可以唯一标识每一行的键进行搜索。
    但是如果你想找到一组行,那么你想使用过滤器。

    键可以同时包含不同类型的对象。所以可以过滤!

    以下是一个具体的例子,分别使用键方法或过滤器方法进行搜索,如 locateOneRow() 和 locateRows()。

    using System.Data;
    namespace namespace_A {
      public static class cData    {
         public static DataTable srchTBL = new DataTable(tableName: "AnyTable");
         public static DataColumn[] theColumns = {
         new DataColumn("IDnum", typeof(int))
         , new DataColumn("IDString", typeof(string))
         , new DataColumn("DataString", typeof(string))
         };
         public static void DataInit(){
            if (srchTBL.Columns.Count == 0) {
               srchTBL.Columns.AddRange(theColumns);
               srchTBL.PrimaryKey = new DataColumn[2] { srchTBL.Columns["IDnum"], srchTBL.Columns["IDstring"] };
            //Data
               srchTBL.Rows.Add(0, "me", "Homemaker");
               srchTBL.Rows.Add(1, "me2", "Breadwinner2");
               srchTBL.Rows.Add(1, "you", "Breadwinner1");
               srchTBL.Rows.Add(2, "kid", "Learner");
            }
         }//DataInit
         public static DataRow locateOneRow(){
            DataInit();
            object[] keyVals = new object[] {0, "me" };
            return srchTBL.Rows.Find(keyVals);
         }//locateOneRow - Result: the "Homemaker" row
         public static DataRow[] locateRows(){ //no Primary key needed
            DataInit();
            return srchTBL.Select("IDnum = 1 OR IDstring = 'me'");
         }//locateRows - Result: the row with "Homermaker" & the row with "Breadwinner2"  
       }//class
       class Program    {
          static void Main(string[] args)       {
          try
          {
              DataRow row1 =cData.locateOneRow();
              DataRow[] rows = cData.locateRows();
          }catch(Exception ex){
         
          }
        } // Main
      } // Program
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-12
      • 2020-12-05
      • 2015-10-22
      • 2011-09-28
      • 1970-01-01
      • 2015-08-26
      • 1970-01-01
      相关资源
      最近更新 更多