没有什么不可以

专注于.NET技术::::

导航

wsaspx文章管理系统开发笔记(3)

接着上次继续.因为NewsClass方法写到这里,一些与NewsClass有关的操作的方法也有了.先开始做显示所有NewsClass的列表.因为我的NewsClass是分为二级(多级也可以,但我看很多文章系统分设那么多级,好像没什么用,费神费时间),所以打算用两个嵌套的Repeater控件来实现.首先是获取父控件的DataSource.这里我考虑了很久,本来打算用DataReader做数据源,但好像也不省事(具体我没有实践过,有谁做过的告诉一声,让我看看),后来还是改用我比较熟悉的DataSet.分别取得父表,子表,然后建立"父子关系".他们不是天生的.如果Asp.net聪明到什么都可以判断该多好.很明显他们是父子关系,但是还是得写一些代码.Bind()方法用来绑定数据源到父Repeater控件,在我的代码里就是RptParent.另外有两个数据读取器,他们也很好理解.我比较倾向于使用DataReader,但这里似乎DataAdapter更合适一点???
 1        private void Bind(){
 2            WsDataProvider ws = new WsDataProvider();
 3            SqlDataAdapter AdpParent = ws.GetAdp("SELECT * FROM wsaspx_newsclass WHERE NewsSmallClassID=0");
 4            DataSet ds = new DataSet();
 5            AdpParent.Fill(ds,"parent");
 6            SqlDataAdapter AdpChild =null;//= new SqlDataAdapter();
 7            AdpChild = ws.GetAdp("SELECT * FROM wsaspx_newsclass Where NewsSmallClassID>0");
 8            AdpChild.Fill(ds,"child");
 9            ds.Relations.Add("wsrelation",ds.Tables["parent"].Columns["NewsClassID"],ds.Tables["child"].Columns["NewsSmallClassID"]);
10            RptParent.DataSource = ds.Tables["parent"].DefaultView;
11        }
剩下的工作已经不多了.现在需要在html页编辑Repeater控件的模板,分别对父子Repeater的数据进行绑定.这里不说太多,我掌握的还可以,不需要记笔记了.
<asp:Label id="LbName" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "NewsClassName")%>'/>

上面是父Repeater控件里绑定的东东.在子Repeater控件绑定的时候出现了一点点小故障.我原来用跟上面一摸一样的代码绑定子控件,出错.具体错误忘记了.下面把两处关键的代码帖一下.
<asp:Repeater id="RptChild" Runat=server DataSource='<% # ((DataRowView)Container.DataItem)
.Row.GetChildRows("wsrelation"%>'>
这里设置子控件的数据源.很不爽,在绑定值的时候比绑定父控件麻烦一点.
<asp:Label id="Label1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "[\"NewsClassName\"]")%>'/>
在我的项目中新建一 Test.aspx.并设为启动项,把上面做的这个web用户自定义控件拖进去.F5一下,呵呵.父子关系还比较融洽,在同一桌面上出现了.:)

posted on 2005-08-15 11:57  哥哥.Net  阅读(668)  评论(0编辑  收藏  举报