GridView.DataSource=IList

原先一直都是在Web页面里直接从数据库里读信息到DataSet里,

然后  GridView.DataSource=DataSet,

而对于GridView里显示列的绑定也是根据Web页面的SQL语句的返回字段设置,

比如sql语句为"select id,name from users",那么在GridView里如果要显示id和name,就需要在GridView里绑定id和name,如下所示:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="id" HeaderText="序号" /> <asp:BoundField DataField="name" HeaderText="项目" /> </Columns> </asp:GridView>

今天尝试将一个IList类型的数据集绑定到GridView.DataSource,

Sql语句依然是select id,name from users,但是此次并不是直接获取,而是先将获取的id和name赋值给一个user类的两个属性userid和username,然后将user类添加到一个IList,再将IList绑定给DataSource,代码如下:

 IList noticelist = GetNoticeList(ID); GridView1.DataSource = noticelist; GridView1.DataBind();

public IList GetNoticeList(int id) { IList NoticeList = new ArrayList(); ENotice notice = null; SqlParameter parm = new SqlParameter(PARAM_ID, SqlDbType.BigInt, 8); parm.Value = id; using (SqlDataReader sdr = SqlHelper.ExecuteReader(SqlHelper.CONN_STR, CommandType.Text, SQL_SELECT_RNOTICE, parm)) { while (sdr.Read()) { notice = new ENotice(sdr.GetInt32(0), sdr.GetString(1)); NoticeList.Add(notice); } } return NoticeList; }

如果GridView在绑定数据时,还是如上面所示,datafield为id和name,那就会报错,说“在选定的数据源上未找到名为“id”的字段或属性。”。

解决办法,将GridView的DataField字段改为userid和username,如下所示:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> <Columns> <asp:BoundField DataField="userid" HeaderText="序号" /> <asp:BoundField DataField="username" HeaderText="项目" /> </Columns> </asp:GridView>

也就是GridView要根据IList里的字段来绑定,而从GetNoticeList函数里可以看到IList里是以notice类为单位添加的,因此GridView的DataField字段要根据sql字段绑定到的notice类里的属性字段来定。

你可能感兴趣的:(GridView.DataSource=IList)