A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© mr_jack 中级黑马   /  2014-3-31 12:02  /  999 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问一下gridview数据绑定,编辑模板的用法

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

1 个回复

倒序浏览
前提:页面需要显示多个表中的字段,几个表之间通过字段保持联系
方法一:直接进行级联查询,并将结果集通过SqlDataAdapter填充DataSet,之后将DataTable的DataView绑定到GridView的数据源,:
//连接数据库,并获得返回结果;
public dataset GetResult(string str1)
{
String str=“数据库连接字符串”;
string str1=“级联查询语句”
SqlConneciton sconnection = new SqlConnection(str);
SqlCommand scommand = new scommand();
scommand。connection = sconnection;
scommand。textcommand = str1;
sqlDataAdapter adapter = new sqlDataAdapter();
adapter。 selectcommand = scommand;
DataSet ds = new DataSet();
adapter。fill(ds);
return ds;
}
页面层.CS代码Fragment:
protected void Page_Load()
{
this.GridView1.datasource = ds.tables[0].defaultView;
this.GridView1.databind();
}
页面层。aspx文件代码Fragment1:将dataview内的所有字段,按照dataview的次序全部绑定到页面。
<asp:GridView id="GirdView1"></asp:GridView>
----------------------------------------------------------------
页面层1。aspx文件代码Fragment2:只绑定部分字段,并更换dataview的顺序规则:比如在dataview内name列显示在第三位,id显示在第二位;而在页面中要求不显示id列,而只显示name列,并排列在第二位:
<asp:GridView id=“GridView1”>
<asp:templateField>
   <itemTemplate>
       <%# ((datarowview)container。dataitem)[ "name" ]。toString() %>
    </ItemTemplate>
</asp:templateField>
<asp:templateField>
   <itemTemplate>
          <%# databinder.Eval(container。Dataitem,"name") %>
   </itemTemplate>
</asp:templateField>
<asp:templateField>
   <itemTemplate>
          <%# databinder.Eval(container,"Dataitem。name") %>
   </itemTemplate>
</asp:templateField>
</asp:GridView>
------------------------------------------------------------------------------------------------------------------------------
方法二:先取出A张表内所需要显示的记录,逐一赋值到n个info对象内,将所有的info对象保存在一个集合类内,(例如:List<>,dictionary,collection,arraylist,hashtable,注意这些类都是非线程安全的),之后将此集合类绑定到GirdView内。
但是一个GirdView只能绑定一个集合类,由于缺少其他表内的字段,我们必须通过A表内的ID,查询B表内的name。所以我们需要在页面层的CS文件,bll层,以及Dal层加入查询name的方法:
由于Asp。net可以绑定方法,属性,控件属性,等等,所以这种做法是行得通的:
<asp:GridView id=“GridView1”>
<asp:templateField>
   <itemTemplate>
       <%# GetName(((XXXinfo)container。dataitem)。id 。tostring())%>
    </ItemTemplate>
</asp:templateField>
<asp:templateField>
   <itemTemplate>
          <%# GetName(databinder.Eval(container。Dataitem,"name")) %>
   </itemTemplate>
</asp:templateField>
<asp:templateField>
   <itemTemplate>
          <%#   GetName(databinder.Eval(container,"Dataitem。name") ) %>
   </itemTemplate>
</asp:templateField>
<asp:templateField>
   <itemTemplate>
          <%#   GetName(databinder.Eval(“name”) ) %>
   </itemTemplate>
</asp:templateField>
</asp:GridView>
//注:GetName方法被写在页面的。cs文件内,方法为空方法,return bll的GetName方法,之后再Return Dal的GetName方法。
------------------------------------------------------------------------------------------------------------------------------
总结:第二种方法的性能很差,因为我需要访问两次数据库,而且与方法一比较会多出很多方法。

评分

参与人数 1技术分 +1 收起 理由
czwanglei + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马