超级无敌、变态的界面实现,请各位大大帮忙。谢谢,在线等。
我想实现这样一个界面:
整个界面是个表格样式。
-------------------------------------------
|产品线一 |
-------------------------------------------
|项目名称 | 产品名称 || 项目名称 | 产品名称|
--------------------------------------------
|项目一 |口产品一 || 项目二 | 口产品二|
--------------------------------------------
|项目三 |口产品三 || 项目四 | 口产品四|
--------------------------------------------
说明:
第一行:产品线名称。
第二行:
第一列:项目名称;
第二列:产品名称,对应第一列的项目,前面有个CheckBox。
第三列:项目名称;
第四列:产品名称,对应第三列的项目,前面有个CheckBox。
产品线是从数据库动态查询出来的。
项目、产品也是从数据库动态查询出来的。注意是一行排放两个产品信息。
然后,把上面的这个格式,再重复N多次,放在上一产品线的下面,直到所有的产品线都显示出来。
这样的界面该怎么做?我用过GridView,但没做出这种效果。我用的是VS2005。
请各位高手多多支持一下。谢谢。
问题点数:200、回复次数:24Top
1 楼ld_thinking(懒得想)回复于 2005-11-13 16:52:52 得分 0
repeater 嵌入datalist就okTop
2 楼pantian(香草园主)回复于 2005-11-13 16:58:02 得分 0
我对repeater不太熟悉,但怎么能动态重复多个产品线呢?
我马上试试看,楼上的最好能给点思路,好吗?Top
3 楼cshmai(四海为家)回复于 2005-11-13 16:59:40 得分 0
看了就头疼,帮你顶Top
4 楼codeangel(http://www.wSoft.Net)回复于 2005-11-13 17:00:37 得分 0
用html画出来吧Top
5 楼jxufewbt(我的目标是5星)回复于 2005-11-13 17:00:38 得分 0
http://dotnet.aspx.cc/ShowDetail.aspx?id=0BF1E82C-A30A-4B5B-85B2-8DB339A41D37Top
6 楼codeangel(http://www.wSoft.Net)回复于 2005-11-13 17:02:13 得分 100
GridView可以做出这样的样子的。
曾经用datagrid做过这样的样子。Top
7 楼pantian(香草园主)回复于 2005-11-13 17:06:30 得分 0
哦,楼上的兄弟,能不能再说得详细一点,或者给我一个例子也行呀。
注意第二列、第四列,都还有一个CheckBox是可以使用的。
还有,怎么重复产品线。产品线单独占一行的,项数也是不固定的。再次谢谢各位。Top
8 楼remymartin(杯中明月)回复于 2005-11-13 17:27:58 得分 0
用DATAGRID1的模板列嵌套一个datagrid2,但datagrid2的事件要单独注册,或者datagrid2里的控件要单独注册.Top
9 楼pantian(香草园主)回复于 2005-11-13 18:25:38 得分 0
我这个问题真的很麻烦吗?各位有没有简单一点的方法呀Top
10 楼gnhao(何飞)回复于 2005-11-13 18:33:32 得分 0
用datareader(开销少)要么就用xml然后用数据岛就可能了,第二个方法开销更少哦...呵不用xsl转换都行Top
11 楼gnhao(何飞)回复于 2005-11-13 18:38:03 得分 0
<xml version="1.0" encoding="gb2312">
<项目>
<1>XXX123</1>
<2>XXXX456</2>
</项目>
XX.xml
<html >
<body>
<xml id="test" src=XX.html></xml>
<div datasrc=#test datafld=1或2></div>
</body>
</html>
我用手写的,大样就是这样,很爽吧,这样在div中就可以显示XXX123或XXX456了Top
12 楼gnhao(何飞)回复于 2005-11-13 18:39:14 得分 0
哦xx.xml上边是个xml文件一边是个html文件,这就是数据岛啊Top
13 楼pantian(香草园主)回复于 2005-11-13 19:57:46 得分 0
我的数据不是取不出来,在数据库里都可以很方便地以各种方式取出来的。
只是不知道该怎么把这些数据动态地放到,像我那样的界面中去。不过,还是谢谢你。Top
14 楼CnEve(龙哥哥)回复于 2005-11-13 20:04:00 得分 40
用 Repeater 控件吧,内部可以嵌入HTML比较灵活。
你最好先用html把需要的表格画出来Top
15 楼pantian(香草园主)回复于 2005-11-13 21:21:51 得分 0
好啦,我自己搞定了,最后还是用一个GridView控件就搞定了。
只是效率可能确实不咋的。不过,幸好数据量应该不会很大,所以,也就无所谓了。(我把所有的数据遍历了一下,加了一些自定义的格式行,然后组成一个新的datatable,最后,再填充到GridView。)
呵呵,谢谢各位捧场。过2天再结贴,再看看还有没有更好的方法。
上面的各位大大会得到所有的200分。后面有好方法的,我会再开足够的贴,每贴再200分。Top
16 楼cityhunter172(寒羽枫)回复于 2005-11-13 21:48:07 得分 30
使用 Repeater 嵌套 DataList 就可以达到效果
具体看 http://172.meibu.com → IT 内部网 → 内部管理 → 专案进度 → 查询
编写 ItemDataBound 事件
private void RP_Info_ItemDataBound(object sender, System.Web.UI.WebControls.RepeaterItemEventArgs e)
{
if(e.Item.ItemIndex>=0)
{
DataList D = e.Item.FindControl("DataList1") as DataList;
DataTable dt = new DataTable();
string line = DataBinder.Eval(e.Item.DataItem,"产线 ID");
dt = GetLineDetail(line);//获取此产线的所有项目与产品名称
D.DataSource=dt;
D.DataBind();
D = e.Item.FindControl("DataList2") as DataList;
dt = GetLineDetail2(line);//同理,自行编写实现此方法
D.DataSource=dt;
D.DataBind();
}
}
一个 HtmlButton 控制一个 <tr></tr> ,注意其 ID 的对应关系
<asp:repeater id="RP_Info" Runat="server">
<HeaderTemplate>
<table id="Repeater1">
<tr>
<td>产线名称</td>
<td>产量</td>
<td>其它1</td>
<td>其它2</td>
</tr>
<ItemTemplate>
<tr>
<td><%#DataBinder.Eval(Container.DataItem,"产线名称")%></td>
<td><%#DataBinder.Eval(Container.DataItem,"产量")%></td>
<td><INPUT type="button" value="查看" onclick="DisplayView(this);" id="Btn_Swtich1" runat="server" NAME="Btn_Swtich1"></td>
<td><INPUT type="button" value="查看" onclick="DisplayView(this);" id="Btn_Swtich2" runat="server" NAME="Btn_Swtich2"></td>
</tr>
<tr runat="server" id="trView1" style="DISPLAY: none">
<td colspan="4">其它1 ———这里可以加你想的东东<br>
<asp:DataList id="DataList1" style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 96px" runat="server" RepeatColumns="2" RepeatDirection="Horizontal">
<HeaderTemplate>
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD>项目名称</TD>
<TD>产品名称</TD>
<TD>项目名称</TD>
<TD>产品名称</TD>
</TR>
</TABLE>
</HeaderTemplate>
<ItemTemplate>
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD><asp:Label id="L_ProjectName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"项目名称")%>'></asp:Label></TD>
<TD><asp:Label id="L_ProductName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"产品名称")%>'></asp:Label></TD>
</TR>
</TABLE>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
<tr runat="server" id="trView2" style="DISPLAY: none">
<td colspan="4">其它2 ———这里可以加你想的东东<br>
<asp:DataList id="DataList2" style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 96px" runat="server" RepeatColumns="2" RepeatDirection="Horizontal">
<HeaderTemplate>
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD>项目名称</TD>
<TD>产品名称</TD>
<TD>项目名称</TD>
<TD>产品名称</TD>
</TR>
</TABLE>
</HeaderTemplate>
<ItemTemplate>
<TABLE WIDTH="100%" BORDER="0" CELLSPACING="0" CELLPADDING="0">
<TR>
<TD><asp:Label id="L_ProjectName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"项目名称")%>'></asp:Label></TD>
<TD><asp:Label id="L_ProductName" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"产品名称")%>'></asp:Label></TD>
</TR>
</TABLE>
</ItemTemplate>
</asp:DataList>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</TABLE>
</FooterTemplate>
</asp:repeater>
制的脚本如下:
var click_td ; //点击的权限窗体
var view_td = new Array(); //存储已显示的权限窗体
//显示具体内容
function DisplayView(obj)
{
var isDisplay =false,tdIndex=0;
var id = obj.id.replace("Btn_Swtich","trView"); //替换ID
click_td = document.getElementById(id);
for (var i in view_td)
{
var id2=click_td.id.substr(0,click_td.id.length-1);
var id3=view_td[i].id.substr(0,view_td[i].id.length-1);
if(id2 == id3) {
//比较两者ID 去掉尾数后是否一样
isDisplay =true; //所点击的 TD 为同一层
if(click_td.id==view_td[i].id){
//如果点击的 TD 在数组里,则返回序号
tdIndex=i;
}
}
}
if(isDisplay)
{
if(click_td.style.display=="none")
{
click_td.style.display="";
//加入数组
view_td.push(click_td);
}
else
{
click_td.style.display="none";
//根据序号移除该窗体
view_td.splice(tdIndex,1);
}
}
else
{
for (var i in view_td){
//关闭所有已显示的窗体
view_td[i].style.display="none";
}
view_td = new Array(); //清空
view_td.push(click_td);//加入刚刚点击的窗体
click_td.style.display="";
}
}
Top
17 楼cityhunter172(寒羽枫)回复于 2005-11-13 21:49:23 得分 10
要把 style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 96px" 这句删除Top
18 楼cityhunter172(寒羽枫)回复于 2005-11-13 21:53:00 得分 10
再次更正
string line = DataBinder.Eval(e.Item.DataItem,"产线 ID");
改成
string line = DataBinder.Eval(e.Item.DataItem,"产线 ID").ToString();
Top
19 楼clxxj(查无此人)回复于 2005-11-14 00:14:52 得分 0
studyTop
20 楼www8s88com(秋天的童话.NET)回复于 2005-11-14 17:06:14 得分 0
我以前做过一排自定义放几个的,建议你用数组。一排放N个,那么第一排是1-N,第二排是N+1到2N,以此类推知道aN,用取商判断a是多少,取余来判断是否还需要换行。Top
21 楼pantian(香草园主)回复于 2005-11-16 16:30:27 得分 0
再顶顶Top
22 楼chenhaoying(风雨无阻)回复于 2005-11-16 17:49:08 得分 0
用模板列试试Top
23 楼njuzgj(罐子)回复于 2005-11-16 22:24:08 得分 0
帮你顶吧Top
24 楼syeerzy(快乐永远*先天下之乐而乐*后天下之忧而忧*)回复于 2005-11-16 22:50:12 得分 10
Repeater+DataList嵌套起来就够了.Top




