超级无敌、变态的界面实现,请各位大大帮忙。谢谢,在线等。

sky 2005-11-13 04:50:46
我想实现这样一个界面:

整个界面是个表格样式。
-------------------------------------------
|产品线一 |
-------------------------------------------
|项目名称 | 产品名称 || 项目名称 | 产品名称|
--------------------------------------------
|项目一 |口产品一 || 项目二 | 口产品二|
--------------------------------------------
|项目三 |口产品三 || 项目四 | 口产品四|
--------------------------------------------

说明:
第一行:产品线名称。
第二行:
第一列:项目名称;
第二列:产品名称,对应第一列的项目,前面有个CheckBox。
第三列:项目名称;
第四列:产品名称,对应第三列的项目,前面有个CheckBox。

产品线是从数据库动态查询出来的。
项目、产品也是从数据库动态查询出来的。注意是一行排放两个产品信息。
然后,把上面的这个格式,再重复N多次,放在上一产品线的下面,直到所有的产品线都显示出来。

这样的界面该怎么做?我用过GridView,但没做出这种效果。我用的是VS2005。
请各位高手多多支持一下。谢谢。
...全文
683 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
syeerzy 2005-11-16
  • 打赏
  • 举报
回复
Repeater+DataList嵌套起来就够了.
njuzgj 2005-11-16
  • 打赏
  • 举报
回复
帮你顶吧
chenhaoying 2005-11-16
  • 打赏
  • 举报
回复
用模板列试试
sky 2005-11-16
  • 打赏
  • 举报
回复
再顶顶
clxxj 2005-11-14
  • 打赏
  • 举报
回复
study
www8s88com 2005-11-14
  • 打赏
  • 举报
回复
我以前做过一排自定义放几个的,建议你用数组。一排放N个,那么第一排是1-N,第二排是N+1到2N,以此类推知道aN,用取商判断a是多少,取余来判断是否还需要换行。
cityhunter172 2005-11-13
  • 打赏
  • 举报
回复
再次更正
string line = DataBinder.Eval(e.Item.DataItem,"产线 ID");
改成
string line = DataBinder.Eval(e.Item.DataItem,"产线 ID").ToString();
cityhunter172 2005-11-13
  • 打赏
  • 举报
回复
要把 style="Z-INDEX: 101; LEFT: 96px; POSITION: absolute; TOP: 96px" 这句删除
cityhunter172 2005-11-13
  • 打赏
  • 举报
回复
使用 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="";
}
}
sky 2005-11-13
  • 打赏
  • 举报
回复
好啦,我自己搞定了,最后还是用一个GridView控件就搞定了。

只是效率可能确实不咋的。不过,幸好数据量应该不会很大,所以,也就无所谓了。(我把所有的数据遍历了一下,加了一些自定义的格式行,然后组成一个新的datatable,最后,再填充到GridView。)

呵呵,谢谢各位捧场。过2天再结贴,再看看还有没有更好的方法。

上面的各位大大会得到所有的200分。后面有好方法的,我会再开足够的贴,每贴再200分。
CnEve 2005-11-13
  • 打赏
  • 举报
回复
用 Repeater 控件吧,内部可以嵌入HTML比较灵活。
你最好先用html把需要的表格画出来
sky 2005-11-13
  • 打赏
  • 举报
回复
我的数据不是取不出来,在数据库里都可以很方便地以各种方式取出来的。

只是不知道该怎么把这些数据动态地放到,像我那样的界面中去。不过,还是谢谢你。
gnhao 2005-11-13
  • 打赏
  • 举报
回复
哦xx.xml上边是个xml文件一边是个html文件,这就是数据岛啊
gnhao 2005-11-13
  • 打赏
  • 举报
回复
<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了
gnhao 2005-11-13
  • 打赏
  • 举报
回复
用datareader(开销少)要么就用xml然后用数据岛就可能了,第二个方法开销更少哦...呵不用xsl转换都行
sky 2005-11-13
  • 打赏
  • 举报
回复
我这个问题真的很麻烦吗?各位有没有简单一点的方法呀
remymartin 2005-11-13
  • 打赏
  • 举报
回复
用DATAGRID1的模板列嵌套一个datagrid2,但datagrid2的事件要单独注册,或者datagrid2里的控件要单独注册.
sky 2005-11-13
  • 打赏
  • 举报
回复
哦,楼上的兄弟,能不能再说得详细一点,或者给我一个例子也行呀。

注意第二列、第四列,都还有一个CheckBox是可以使用的。

还有,怎么重复产品线。产品线单独占一行的,项数也是不固定的。再次谢谢各位。
codeangel 2005-11-13
  • 打赏
  • 举报
回复
GridView可以做出这样的样子的。
曾经用datagrid做过这样的样子。
jxufewbt 2005-11-13
  • 打赏
  • 举报
回复
http://dotnet.aspx.cc/ShowDetail.aspx?id=0BF1E82C-A30A-4B5B-85B2-8DB339A41D37
加载更多回复(4)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧