具体就拿一个简单的例子来说吧:第一次从数据库拿到一个DataTable后在后面的处理的过程中发现另外一个地方也要这个DataTable里面的部分数据,例如说要这个DataTable中的前10条吧,我又不想从数据库里面再去读取数据,想办法从这个DataTable中拿出来,常用的可能就是循环一条条读取,但是我还想走捷径呢,google里面找了下,也没有发现什么,最后想到DataTable有个DefaultView可以筛选一些纪录的,那就给这个DataTable加一列吧,但是加一列怎么加呢?在msdn里面找到了启示:
1private void AddAutoIncrementColumn()
2{
3 DataColumn column = new DataColumn();
4 column.DataType = System.Type.GetType("System.Int32");
5 column.AutoIncrement = true;
6 column.AutoIncrementSeed = 1000;
7 column.AutoIncrementStep = 10;
8
9 // Add the column to a new DataTable.
10 DataTable table = new DataTable("table");
11 table.Columns.Add(column);
12}
13
但是发现加了一列并没有填充值,都为空的,没有办法,自己来加吧:看代码中的for循环:
1 void InitRepeateData()
2 {
3 string sql = @"SELECT TOP 12 * FROM Customer WITH (NOLOCK) ORDER BY sysno DESC";
4 DataTable dt = SqlHelper.ExecuteDataSet(sql).Tables[0];
5 Repeater1.DataSource = dt;
6 Repeater1.DataBind();
7
8 DataColumn col = new DataColumn("cyyID", typeof(int));
9 DataTable dtt = dt;
10 dtt.Columns.Add(col);
11 //循环给新加的一列填充有规律的值
12 for (int i = 0; i < dt.Rows.Count; i++)
13 {
14 dtt.Rows[i]["cyyID"] = i + 1;
15 }
16 DataView dv = dtt.DefaultView;
17
18 dv.RowFilter = "yyID <=5";
19 Repeater2.DataSource = dv;
20 Repeater2.DataBind();
21 }
终于看到效果了,哈哈,没有什么特别的,加一列就好了,减少了访问数据库的麻烦了。