【问题标题】:How can I get row index from tableadapter by cell value?如何按单元格值从 tableadapter 获取行索引?
【发布时间】:2013-07-08 11:46:35
【问题描述】:

我想按单元格值学习行索引。我知道单元格值“E003”。如何学习该行包含单元格值“E003”的行索引?我需要 7 而不是 11。

var table =TableAdapter.GetData();
var resultRow = table.Rows["I need row index. But I know just cell value"]; 

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    基于TableAdapter Overview你可以get the underlying DataTable你想这样查询var table = TableAdapter.GetData()

    通过搜索具有给定值的 DataTable 来查找行索引

    以下几行显示了如何通过该行的主键查找某行的索引。首先,您从 DataTable 中获得 collection of rows,然后您可以使用 Find() 方法按给定值搜索行。

    DataRowCollection rowCol = GetDataTable().Rows; 
    rowCol.Dump("Content for RowCollection: ");
    // find row by value of primary key
    // for it to work Emp_Code as to be set as primary key column
    DataRow foundRow = rowCol.Find("E003"); 
    
    int indexOfRow = rowCol.IndexOf(foundRow);
    indexOfRow.Dump("zero based RowIndex is: ");
    

    基础数据与您的屏幕截图类似

    private DataTable GetDataTable()
    {
       DataTable table = new DataTable("NameIsOptional");
       table.Columns.Add(new DataColumn("Emp_Id", typeof(int)));
       table.Columns.Add(new DataColumn("Emp_Code", typeof(string)));
       table.Columns.Add(new DataColumn("L_Name", typeof(string)));
       // set Column 'Emp_Code' as primary key column
       table.PrimaryKey = new DataColumn[] {table.Columns["Emp_Code"]};
    
       table.Rows.Add(1, "E001", "dave");
       table.Rows.Add(2, "E002", "mandle");
       table.Rows.Add(3, "E007", "sarana");
       table.Rows.Add(4, "E004", "poyekar");
       table.Rows.Add(5, "E005", "suryawanshi");
       table.Rows.Add(9, "E006", "survey");
       table.Rows.Add(11, "E003", "singh");
    
       return table;
    }
    

    由于您对Emp_Code 列几乎没有提及,我假设它可以用作数据表的主键。

    linqpad 演示程序截图

    下面可以看到上面的代码在linqpad中执行

    如果您不能使用Emp_Code 作为主键,您可以在问题How to find a value in DataTable in C#? 中找到您需要的信息

    【讨论】:

      【解决方案2】:

      我今天找到了一个这样的解决方案。

                  var table = TableAdapter.GetData().Select(s => new { s.Index })
                                        .AsEnumerable()
                                        .Select((s, counter) => new
                                        {
                                            s.Index,
                                            counter = counter + 1
      
                                        });
      
                  foreach (var item in table)
                  {
                      if (item.Index == Emp_ID)
                      {                        
                          //do something
      
                          break;
                      }
                  }
      

      【讨论】:

      • 我了解以下内容:var table = TableAdapter.GetData() 返回一个数据表。 Select(...) 返回一个 DataRows 数组。 Select() 的参数看起来像 statement lambda s=> new { s.Index} 尽管这个 lambda 中的 new 让我感到困惑,我无法弄清楚 lambda 表达式 s => new { s.Index} 是什么类型或它做了什么。在 Linqpad 中尝试您的代码会返回错误。您能否解释一下您的答案如何适合您的问题以获取 Datagrid 的 rowIndex?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-30
      相关资源
      最近更新 更多