datarow是datatable中的一行记录 datatable是dataset中的一个表

从DataTable 读取数据然后把值给ListView
private void Sample(DataTable dt)
{
List<ListViewItem> items = new List<ListViewItem>();

foreach (DataRow dr in dt.Rows)
{
object o=dr[1];
ListViewItem newItem = new ListViewItem();
newItem.Text =newItem.Text = Convert.ToString(dr[1]);
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
newItem.SubItems.Add("");
items.Add(newItem);

datatable.DefaultView获取整个表的视图
datatable.Rows返回表中的所有行
视图可以对表进行排序筛选等操作,只要设置相应的属性就行啦,语句有如SQL(如" Order by aaa" "aaa like '%a%'"),但是Rows就不

ASP.net有这些知识,DataSet,DataTable,DataReader,DataAdapter.
DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,应用程序开始运行时,把数据库相关数据保存到DataSet.
DataTable表示内存中数据的一个表.常和DefaultView使用获取可能包括筛选视图或游标位置的表的自定义视图。
DataReader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快
DataAdapter对象是用来读取数据库.可读取写入数据,某条数据超着强,但它占用内存比dataReader大,速度慢

DataTable dt = new DataTable("ddan");
dt.Columns.Add(new DataColumn("product", System.Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("no", System.Type.GetType("System.Int32")));
dt.PrimaryKey = new DataColumn[] { dt.Columns["product"]};
dt.Rows.Add(int.Parse(Request["id"]),1);


DataTable 读写的问题
悬赏分:0 - 解决时间:2007-12-3 18:16
DataTable dt = new DataTable("ddan");
dt.Columns.Add(new DataColumn("product", System.Type.GetType("System.Int32")));
dt.Columns.Add(new DataColumn("no", System.Type.GetType("System.Int32")));
dt.PrimaryKey = new DataColumn[] { dt.Columns["product"]};
dt.Rows.Add(int.Parse(Request["id"]),1);


我用如上办法做了一个 DataTable 插入若干条数据

product no
* *
2 *
* *
* *
我 知道 某行 product字段的值 2 我要取同行 no字段的数据
怎么搞,取到后 还要更改no字段的值
提问者: lwping0214 - 经理 五级 最佳答案
DataTable 本身就有一个Select方法,条件用sql语句写
返回值是符合条件的DataRow集合,即DataRow[]
DataRow[] dr = dt.Select("product = '" + "2" + "'");
你的product 是主键,那么dr长度为1
dr[0]["no"]就是你要取的值。

DataTable 更改值 可以直接赋值,
如dt.Rows[0]["no"] = 53;第一行列名为no赋值为53;
但是这需要知道你要改的是哪一行,那么主键与行数之间就需要有一定联系,即由主键可推知行数;要么你需要增加一列ID来记录行数。

说句题外话,如果不是必须用DataTable的话,本人推荐Hashtable 。

//username,为表中的列名
string fieldname = "username";

for (int i = 0; i < myTable.Rows.Count; i++)
{
//使用列名
Response.Write(myTable.Rows[i][fieldname].ToString());
Response.Write("<BR>");
}
//显示第一列的数据
int fieldindex = 0;
for (int i = 0; i < myTable.Rows.Count; i++)
{
//使用索引
Response.Write(myTable.Rows[i][fieldindex].ToString());
Response.Write("<BR>");
}


直接创建一个DataTable,并为之添加数据(自定义DataTable)
DataTable dt=new DataTable("cart");
   DataColumn dc1=new DataColumn("prizename",Type.GetType("System.String"));
   DataColumn dc2=new DataColumn("point",Type.GetType("System.Int16"));
   DataColumn dc3=new DataColumn("number",Type.GetType("System.Int16"));
   DataColumn dc4=new DataColumn("totalpoint",Type.GetType("System.Int64"));
   DataColumn dc5=new DataColumn("prizeid",Type.GetType("System.String"));
   dt.Columns.Add(dc1);
   dt.Columns.Add(dc2);
   dt.Columns.Add(dc3);
   dt.Columns.Add(dc4);
   dt.Columns.Add(dc5);
//以上代码完成了DataTable的构架,但是里面是没有任何数据的
   for(int i=0;i<10;i++)
   {
    DataRow dr=dt.NewRow();
    dr["prizename"]="娃娃";
    dr["point"]=10;
    dr["number"]=1;
    dr["totalpoint"]=10;
    dr["prizeid"]="001";
    dt.Rows.Add(dr);
   }
//填充了10条相同的记录进去

有人会这么做
DataRow dr=new DataRow();
..
dt.Rows.Add(dr);
这样是不行的,因为一个DataRow必定是属于一个DataTable的,不能凭空建立,就好比一条记录一定是属于一个表一样

又有人这么做
    DataRow dr=dt.NewRow();
    dr["prizename"]="娃娃";
    dr["point"]=10;
    dr["number"]=1;
    dr["totalpoint"]=10;
    dr["prizeid"]="001";
   for(int i=0;i<10;i++)
   {
         dt.Rows.Add(dr);
   }
这样做同样是错误的,因为DataTable已经有这条DataRow了,就好比一个表中不可能存在2条一样的记录,必须每次NewRow()