甲方给了我设计的样式,我一看头大了,知道这下不好做了。
表格一列中,左列是父类的名称,中间是子类的所有名称包括前面有一个单选按钮,后面是一列其它的。
想到用嵌套DataGrid,查了最少半个小时的网上资料,还是没有我要的。最后在开发经理的提醒下,我终于决定自己做。
说起来挺麻烦,把代码帖出来吧:有心得的可以交流下啊
前台.aspx代码:
<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"testGridLayout.aspx.cs\" Inherits=\"testGridLayout\" %>
<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">
<html xmlns=\"http://www.w3.org/1999/xhtml\" >
<head runat=\"server\">
<title>无标题页</title>
</head>
<body>
<form id=\"form1\" runat=\"server\">
<div>
<aspataGrid ID=\"DataGrid1\" runat=\"server\" DataKeyField=\"ID\" AutoGenerateColumns=\"False\"
Width=\"100%\" HeaderStyle-BackColor=\"#78A9CD\"
HeaderStyle-CssClass=\"fontwhite\" BackColor=\"White\" BorderColor=\"#AFCDE2\" BorderWidth=\"1px\"
CssClass=\"font1\" HeaderStyle-HorizontalAlign =\"center\" >
<Columns>
<asp:TemplateColumn SortExpression=\"Name\" HeaderText=\"版块\" >
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, \"Name\")%>
</ItemTemplate>
<ItemStyle HorizontalAlign=\"Center\" BorderColor=\"#AFCDE2\" BorderWidth=\"1px\" />
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression=\"Expenses\" HeaderText=\"请选择其中一项\">
<ItemTemplate>
<asp:RadioButtonList ID=\"RadioButtonList1\" runat=\"server\" AutoPostBack=\"True\" DataTextField =\"Name\" DataValueField =\"ChildFlag\" DataSource=\'<%#GetOneSource(DataBinder.Eval(Container.DataItem, \"Name\").ToString(), DataBinder.Eval(Container.DataItem, \"ChildFlag\").ToString())%>\' RepeatLayout=\"Flow\" RepeatDirection=\"Horizontal\">
</asp:RadioButtonList>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression=\"Expenses\" HeaderText=\"资费\">
<ItemTemplate>
<%# DataBinder.Eval(Container.DataItem, \"Expenses\")%>
</ItemTemplate>
<ItemStyle HorizontalAlign=\"Center\" BorderColor=\"#AFCDE2\" BorderWidth=\"1px\" />
</asp:TemplateColumn>
</Columns>
<HeaderStyle BackColor=\"#78A9CD\" CssClass=\"fontwhite\" HorizontalAlign=\"Center\" />
</aspataGrid>
<asp:HiddenField ID=\"HiddenField1\" runat=\"server\" />
<br />
<asp:Button ID=\"Button1\" runat=\"server\" OnClick=\"Button1_Click\" Text=\"Button\" /></div>
</form>
</body>
</html>
后台..CS代码:
public partial class testGridLayout : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Response.Write(HiddenField1.Value);
if (!IsPostBack)
{
int iCount;
DataTable dt = 只有父类的表集合;
DataGrid1.DataSource = dt;
DataGrid1.DataBind();
}
}
public DataTable GetOneSource(string name, string key)
{
DataTable dt = new SourceModule().SearchByOriginKey(2, key);
for (int i = 0; i < DataGrid1.Items.Count; i++)
{
RadioButtonList aa = (RadioButtonList)DataGrid1.Items.Cells[0].FindControl(\"RadioButtonList1\");
aa.DataSource = dt;
aa.DataValueField = \"要取的子类ID\";
aa.DataTextField = \"要到的子类名称\";
}
return dt;
}
protected void Button1_Click(object sender, EventArgs e)
{
StringBuilder choice = new StringBuilder();
for (int i = 0; i < DataGrid1.Items.Count; i++)
{
RadioButtonList aa = (RadioButtonList)DataGrid1.Items.Cells[0].FindControl(\"RadioButtonList1\");
for (int j = 0; j < aa.Items.Count; j++)
{
if (aa.Items[j].Selected == true)
{
choice.Append(aa.Items[j].Value);
choice.Append(\",\");
}
}
}
HiddenField1.Value = choice.ToString().Substring(0,choice.Length-1);
}
} |