datatable如何取多行多列中的某一列某一行的值?

时间:2020-11-26 10:29:55
我以前从sqldataadapter读取的值都是一条,填充datatable,取值比较容易,如果读取的值是一个集合,该如何按照需要取出来?例如取第一列第二行的值,取第二列第二行的值,等该如何表示?

6 个解决方案

#1


DataTable对象
DataTable 是 ADO.NET 库中的核心对象,就像普通的数据库中的表一样,它也有行和列。它主要包括DataRow和DataColumn,分别代表行和列。
(1) 数据行(DataRow)
数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。它可能代表一个学生、一位用户、一张订单或者一件货物的相关数据。DataRow对象的方法提供了对表中数据的插入、删除、更新和查看等功能。提取数据表中的行的语句如下:
DataRow dr = dt.Rows[n];
其中:DataRow代表数据行类;dr是数据行对象;dt代表数据表对象; n代表行的序号(序号从0开始)。
(2) 数据列(DataColumn)
数据表中的数据列(又称字段)定义了表的数据结构,例如,可以用它确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键、是否允许空值等;还可以让列在一个初始值的基础上自动增殖,增值的步长还可以自行定义。
 某列的值需要在数据行的基础上进行。语句如下:


string dc = dr.Columns["字段名"].ToString();

  或者 

string dc = dr.Column[i].ToString();//i表示对应的列索引

 综合前面的语句,若想取出数据表(dt)中第3条记录中的“姓名”字段,并将该字段的值放入一输入框(textBox1)中时,语句可以写成:

DataRow dRow = dt.Rows[2 ];   // 从数据表提取行 
string textBox1.Text=dRow["CompanyName"].ToString();  // 从行中取出字段的值

#2


dt.rows[i][j]

#3


前台:

<table border="1" cellpadding="0" cellspacing="0"> 
    <tr><td>编号</td><td>帐号</td><td>真实姓名</td><td>年龄</td><td>性别</td><td>手机</td><td>电话</td><td>电子邮件</td></tr> 
    <%  
        //在页面中调用后台代码,这样也能保证生成的代码不会位于<html></html>标记之外 
        ShowData();  
    %> 
    </table> 

后台:

//供前台页面调用的方法,这个方法必须是protected或者public 
    protected void ShowData() 
    { 
        //实例化Connection对象 
        SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa"); 
        //实例化Command对象 
        SqlCommand command = new SqlCommand("select * from UserInfo where sex=0", connection); 
        SqlDataAdapter adapter = new SqlDataAdapter(command); 
        /* 
         下面的被注释掉的代码与上面的代码是等效的 
        SqlDataAdapter adapter = new SqlDataAdapter("select * from UserInfo where sex=0", connection); 
         */ 
        DataTable data = new DataTable(); 
        adapter.Fill(data); 
        /* 下面的被注释掉语句与上面填充DataTable的效果是一样的,我更倾向于没有注释掉的部分 
        DataSet ds = new DataSet();//实例化DataSet 
        adapter.Fill(ds, "UserInfo");//填充ds中的"UserInfo"表 
        DataTable data = ds.Tables["UserInfo"]; 
        */ 
        for (int i = 0; i < data.Rows.Count; i++) 
        { 
            Response.Write("<tr><td>" + data.Rows[i]["UserId"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["UserName"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["RealName"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["Age"].ToString() + "</td>"); 
            //下面是按照列顺序直接读取值,并且根据值来判断最终显示结果 
            Response.Write("<td>" + (bool.Parse(data.Rows[i]["Sex"].ToString()) == true ? "男" : "女") + "</td>"); 
            //根据列顺序读,列的值需要做相应转换 
            Response.Write("<td>" + data.Rows[i]["Mobile"].ToString() + "</td>"); 
            //根据列名来读取,列的值需要做相应转换 
            Response.Write("<td>" + data.Rows[i]["Phone"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["Email"].ToString() + "</td></tr>\n"); 
        } 
    } 

#4


第一列第二行的值:
DataTable.Rows[1][0].ToString();
取第二列第二行的值:
DataTable.Rows[1][1].ToString();

基本操作:
foreach(DataRow   dr   in   YourDataTable.Rows)  
  {  
      Response.Write(dr[n]);  
      //or  
      //Response.Write(dr["ColumnName"]); 
  }
请参考: http://topic.csdn.net/t/20060304/03/4591950.html
         http://www.cnblogs.com/floatping/archive/2005/10/24/261044.html

#5


看看这篇文章吧,非常详细了:

asp.net夜话之七:ADO.NET介绍
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。

#6


"第一列第二行的值,取第二列第二行的值" 应该先是行然后是列 datatable.Rows[1][0]; datatable.Rows[1][1]

#1


DataTable对象
DataTable 是 ADO.NET 库中的核心对象,就像普通的数据库中的表一样,它也有行和列。它主要包括DataRow和DataColumn,分别代表行和列。
(1) 数据行(DataRow)
数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。它可能代表一个学生、一位用户、一张订单或者一件货物的相关数据。DataRow对象的方法提供了对表中数据的插入、删除、更新和查看等功能。提取数据表中的行的语句如下:
DataRow dr = dt.Rows[n];
其中:DataRow代表数据行类;dr是数据行对象;dt代表数据表对象; n代表行的序号(序号从0开始)。
(2) 数据列(DataColumn)
数据表中的数据列(又称字段)定义了表的数据结构,例如,可以用它确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键、是否允许空值等;还可以让列在一个初始值的基础上自动增殖,增值的步长还可以自行定义。
 某列的值需要在数据行的基础上进行。语句如下:


string dc = dr.Columns["字段名"].ToString();

  或者 

string dc = dr.Column[i].ToString();//i表示对应的列索引

 综合前面的语句,若想取出数据表(dt)中第3条记录中的“姓名”字段,并将该字段的值放入一输入框(textBox1)中时,语句可以写成:

DataRow dRow = dt.Rows[2 ];   // 从数据表提取行 
string textBox1.Text=dRow["CompanyName"].ToString();  // 从行中取出字段的值

#2


dt.rows[i][j]

#3


前台:

<table border="1" cellpadding="0" cellspacing="0"> 
    <tr><td>编号</td><td>帐号</td><td>真实姓名</td><td>年龄</td><td>性别</td><td>手机</td><td>电话</td><td>电子邮件</td></tr> 
    <%  
        //在页面中调用后台代码,这样也能保证生成的代码不会位于<html></html>标记之外 
        ShowData();  
    %> 
    </table> 

后台:

//供前台页面调用的方法,这个方法必须是protected或者public 
    protected void ShowData() 
    { 
        //实例化Connection对象 
        SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa"); 
        //实例化Command对象 
        SqlCommand command = new SqlCommand("select * from UserInfo where sex=0", connection); 
        SqlDataAdapter adapter = new SqlDataAdapter(command); 
        /* 
         下面的被注释掉的代码与上面的代码是等效的 
        SqlDataAdapter adapter = new SqlDataAdapter("select * from UserInfo where sex=0", connection); 
         */ 
        DataTable data = new DataTable(); 
        adapter.Fill(data); 
        /* 下面的被注释掉语句与上面填充DataTable的效果是一样的,我更倾向于没有注释掉的部分 
        DataSet ds = new DataSet();//实例化DataSet 
        adapter.Fill(ds, "UserInfo");//填充ds中的"UserInfo"表 
        DataTable data = ds.Tables["UserInfo"]; 
        */ 
        for (int i = 0; i < data.Rows.Count; i++) 
        { 
            Response.Write("<tr><td>" + data.Rows[i]["UserId"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["UserName"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["RealName"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["Age"].ToString() + "</td>"); 
            //下面是按照列顺序直接读取值,并且根据值来判断最终显示结果 
            Response.Write("<td>" + (bool.Parse(data.Rows[i]["Sex"].ToString()) == true ? "男" : "女") + "</td>"); 
            //根据列顺序读,列的值需要做相应转换 
            Response.Write("<td>" + data.Rows[i]["Mobile"].ToString() + "</td>"); 
            //根据列名来读取,列的值需要做相应转换 
            Response.Write("<td>" + data.Rows[i]["Phone"].ToString() + "</td>"); 
            Response.Write("<td>" + data.Rows[i]["Email"].ToString() + "</td></tr>\n"); 
        } 
    } 

#4


第一列第二行的值:
DataTable.Rows[1][0].ToString();
取第二列第二行的值:
DataTable.Rows[1][1].ToString();

基本操作:
foreach(DataRow   dr   in   YourDataTable.Rows)  
  {  
      Response.Write(dr[n]);  
      //or  
      //Response.Write(dr["ColumnName"]); 
  }
请参考: http://topic.csdn.net/t/20060304/03/4591950.html
         http://www.cnblogs.com/floatping/archive/2005/10/24/261044.html

#5


看看这篇文章吧,非常详细了:

asp.net夜话之七:ADO.NET介绍
ADO.NET是对Microsoft ActiveX Data Objects (ADO)一个跨时代的改进,它提供了平台互用性和可伸缩的数据访问。由于传送的数据都是XML格式的,因此任何能够读取XML格式的应用程序都可以进行数据处理。事实上,接受数据的组件不一定要是ADO .NET组件,它可以是基于一个Microsoft Visual Studio的解决方案,也可以是任何运行在其它平台上的任何应用程序。以前做数据库访问的时候,需要一直与数据库保持连接,直到获取完所有满足需要的数据之后才会断开数据库连接,这种数据库访问方式称之为连接式数据访问技术。相比于以前的连接式数据访问技术,ADO.NET除了提供连接式数据访问技术之外,还提供了另一种断开式解决方案,那就是在内存中模拟一个数据库,也就是内存中的数据库。我们知道在实际的数据库技术中,每个数据库就是一个业务逻辑单元,一般来说这个数据库包含了实现一个应用软件或者一个网站所需要的全部数据。

#6


"第一列第二行的值,取第二列第二行的值" 应该先是行然后是列 datatable.Rows[1][0]; datatable.Rows[1][1]