将表格插入中继器内的单个单元格中 [英] Insert table in a single cell inside repeater
问题描述
我试图用下面的asp.net Repeater构建一个表结构:
column 1 |第2列
Row1 cell1 cell2
--------------------------------- ------
表1表2
-------------------------------- -
col1 | col2 | col3_同样的列和行也在这里
Row2 row1 ____ | ____ | ____
row2___ | ____ | _____
row3 ____ | ____ | _____
但我在添加表1 和表2 用于第2行。我不知道如何将表添加到Repeater中的单个单元格中,并且数据需要从DataTable进行绑定。
以下是我的Repeater代码:
< asp:Repeater ID =Repeaterprunat =server>
< HeaderTemplate>
< table>
< tr> th usedcount< th>< th> notUsedCount< / th>< / tr>
< / HeaderTemplate>
< ItemTemplate>
< tr>
< td>< asp:TextBox runat =serverID =txtAvaiText ='<%#Eval(Count)%>'ReadOnly =true>< ASP:文本框>< / TD>
< td>< asp:TextBox runat =serverID =txtConvText =''ReadOnly =true>< / asp:TextBox>< / td>
< / tr>
< / ItemTemplate>
< FooterTemplate>
< / table>
< / FooterTemplate>
< / asp:Repeater
会非常感谢我?可以嵌套不同的asp.net数据表示控件(例如 asp:Repeater
, asp:DataList
, asp:GridView
或 asp:Table
等)在Repeater控件中。我添加了一个用多个Repeater控件制作嵌套结构的快速示例: $ p> < asp:Repeater ID =RepeaterTableOnItemDataBound =RepeaterTable_ItemDataBoundrunat =server>
< HeaderTemplate>
< table>
< tr>
< th>列1< / th>
< th>列2< / th>
< / tr>
< / HeaderTemplate>
< ItemTemplate>
< asp:Panel ID =PanelTextBoxesrunat =server>
< tr>
< td>
< asp:TextBox ID =txtAvaiText ='<%#Eval(Count)%>'runat =server>< / asp:TextBox>
< / td>
< td>
< asp:TextBox ID =txtConvText =''runat =server>< / asp:TextBox>
< / td>
< / tr>
< / asp:面板>
< asp:Panel ID =PanelTablesrunat =server>
< tr>
< td>
< asp:Repeater ID =RepeaterTable1OnItemDataBound =RepeaterTable1_ItemDataBoundrunat =server>
< HeaderTemplate>
< table>
< tr>
T1 Col 1< / th>
T1 Col 2< / th>
< / tr>
< / HeaderTemplate>
< ItemTemplate>
< tr>
< td>
< asp:Label ID =lblCol1runat =serverText ='<%#Eval(Col1)%>'>< / asp:Label>
< / td>
< td>
< asp:Label ID =lblCol2runat =serverText ='<%#Eval(Col2)%>'>< / asp:Label>
< / td>
< / tr>
< / ItemTemplate>
< FooterTemplate>
< / table>
< / FooterTemplate>
< / asp:中继器>
< / td>
< td>
< asp:Repeater ID =RepeaterTable2OnItemDataBound =RepeaterTable2_ItemDataBoundrunat =server>
< HeaderTemplate>
< table>
< tr>
T2 Col 1< / th>
T2 Col 2< / th>
< / tr>
< / HeaderTemplate>
< ItemTemplate>
< tr>
< td>
< asp:Label ID =lblCol1runat =serverText ='<%#Eval(Col1)%>'>< / asp:Label>
< / td>
< td>
< asp:Label ID =lblCol2runat =serverText ='<%#Eval(Col2)%>'>< / asp:Label>
< / td>
< / tr>
< / ItemTemplate>
< FooterTemplate>
< / table>
< / FooterTemplate>
< / asp:中继器>
< / td>
< / tr>
< / asp:面板>
< / ItemTemplate>
< FooterTemplate>
< / table>
< / FooterTemplate>
< / asp:中继器>
.Aspx.cs代码:
DataTable TempDT = new DataTable();
protected void Page_Load(object sender,EventArgs e)
{
if(!IsPostBack)
{
getData();
//创建DataTable 3 x 2
public void getData()
{
TempDT = new DataTable();
TempDT.Columns.Add(Col1);
TempDT.Columns.Add(Col2);
TempDT.Columns.Add(Count);
TempDT.Rows.Add(Temp,Temp,100);
TempDT.Rows.Add(Temp,Temp,100);
TempDT.Rows.Add(Temp,Temp,100);
//将DataTable从PostBack丢失到ViewState中
ViewState [DT] = TempDT;
RepeaterTable.DataSource = TempDT;
RepeaterTable.DataBind();
//在绑定数据中调用父Repeater
protected void RepeaterTable_ItemDataBound(object sender,RepeaterItemEventArgs e)
{
// check Repeater item type不在编辑模式
if(e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
DataTable dt =新的DataTable();
//从ViewState获取并设置DataTable
dt = ViewState [DT]作为DataTable;
Repeater RepeaterTable1 = e.Item.FindControl(RepeaterTable1)作为Repeater;
Repeater RepeaterTable2 = e.Item.FindControl(RepeaterTable2)as Repeater;
RepeaterTable1.DataSource = dt;
RepeaterTable1.DataBind(); //调用RepeaterTable1_ItemDataBound事件
RepeaterTable2.DataSource = dt;
RepeaterTable2.DataBind(); // //调用RepeaterTable2_ItemDataBound事件
Panel PanelTextBoxes = e.Item.FindControl(PanelTextBoxes)作为Panel;
Panel PanelTables = e.Item.FindControl(PanelTables)as Panel;
//只显示第一个结构
if(e.Item.ItemIndex!= 0)
{
PanelTextBoxes.Visible = false;
PanelTables.Visible = false;
$ b //在绑定数据上调用子Repeater
protected void RepeaterTable1_ItemDataBound(object sender,RepeaterItemEventArgs e)
{
//检查Repeater项目类型是否处于编辑模式
if(e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
// ..这里是代码当孩子中继器绑定
}
}
//在绑定数据时调用子Repeater
保护void RepeaterTable2_ItemDataBound(object sender,RepeaterItemEventArgs e)
{
//检查Repeater项目类型是否处于编辑模式
if(e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
// ..这里是子代中继器绑定的代码
}
}
演示图像是:
如果你不想重复整个结构,那么只需在
RepeaterTable_ItemDataBound
更新: > event: Panel PanelTextBoxes = e.Item.FindControl(PanelTextBoxes)as Panel;
Panel PanelTables = e.Item.FindControl(PanelTables)as Panel;
if(e.Item.ItemIndex!= 0)
{
PanelTextBoxes.Visible = false;
PanelTables.Visible = false;
}
不重复整个结构图像演示:
I am trying to build a table structure using asp.net Repeater like this below:
column 1 | Column 2
Row1 cell1 cell2
---------------------------------------
TABLE 1 TABLE 2
----------------------------------
col1|Col2|Col3_ same column and rows are here as well
Row2 row1____|____|____
row2___ |____|_____
row3____|____|_____
But I got stuck in adding Table 1 and Table 2 for the Row 2. I am not sure how to add the table in a single cell inside the Repeater and the data needs to binding from the DataTable.
And below is my code for Repeater:
<asp:Repeater ID="Repeaterp" runat="server">
<HeaderTemplate>
<table>
<tr><th>usedcount</th><th>notUsedCount</th></tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:TextBox runat="server" ID="txtAvai" Text='<%#Eval("Count") %>' ReadOnly="true"></asp:TextBox></td>
<td><asp:TextBox runat="server" ID="txtConv" Text='' ReadOnly="true"></asp:TextBox></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater
Could any one please suggest any idea on this one that would be very grateful to me?
You can nest different asp.net Data Representation controls (e.g. asp:Repeater
, asp:DataList
, asp:GridView
or asp:Table
etc.) inside a Repeater control. I have added a quick example for making a nested structure with multiple Repeater controls:
.Aspx Code:
<asp:Repeater ID="RepeaterTable" OnItemDataBound="RepeaterTable_ItemDataBound" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>Column 1</th>
<th>Column 2</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<asp:Panel ID="PanelTextBoxes" runat="server">
<tr>
<td>
<asp:TextBox ID="txtAvai" Text='<%# Eval("Count") %>' runat="server"></asp:TextBox>
</td>
<td>
<asp:TextBox ID="txtConv" Text='' runat="server"></asp:TextBox>
</td>
</tr>
</asp:Panel>
<asp:Panel ID="PanelTables" runat="server">
<tr>
<td>
<asp:Repeater ID="RepeaterTable1" OnItemDataBound="RepeaterTable1_ItemDataBound" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>T1 Col 1</th>
<th>T1 Col 2</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblCol1" runat="server" Text='<%# Eval("Col1") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblCol2" runat="server" Text='<%# Eval("Col2") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
<td>
<asp:Repeater ID="RepeaterTable2" OnItemDataBound="RepeaterTable2_ItemDataBound" runat="server">
<HeaderTemplate>
<table>
<tr>
<th>T2 Col 1</th>
<th>T2 Col 2</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label ID="lblCol1" runat="server" Text='<%# Eval("Col1") %>'></asp:Label>
</td>
<td>
<asp:Label ID="lblCol2" runat="server" Text='<%# Eval("Col2") %>'></asp:Label>
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</td>
</tr>
</asp:Panel>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
.Aspx.cs Code:
DataTable TempDT = new DataTable();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
getData();
}
}
// create DataTable 3 x 2
public void getData()
{
TempDT = new DataTable();
TempDT.Columns.Add("Col1");
TempDT.Columns.Add("Col2");
TempDT.Columns.Add("Count");
TempDT.Rows.Add("Temp", "Temp", 100);
TempDT.Rows.Add("Temp", "Temp", 100);
TempDT.Rows.Add("Temp", "Temp", 100);
// store DataTable into ViewState from lost on PostBack
ViewState["DT"] = TempDT;
RepeaterTable.DataSource = TempDT;
RepeaterTable.DataBind();
}
// Calls parent Repeater on Binding Data
protected void RepeaterTable_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// check Repeater item type is not in edit mode
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
DataTable dt = new DataTable();
// get and set DataTable from ViewState
dt = ViewState["DT"] as DataTable;
Repeater RepeaterTable1 = e.Item.FindControl("RepeaterTable1") as Repeater;
Repeater RepeaterTable2 = e.Item.FindControl("RepeaterTable2") as Repeater;
RepeaterTable1.DataSource = dt;
RepeaterTable1.DataBind(); // calls RepeaterTable1_ItemDataBound event
RepeaterTable2.DataSource = dt;
RepeaterTable2.DataBind(); // // calls RepeaterTable2_ItemDataBound event
Panel PanelTextBoxes = e.Item.FindControl("PanelTextBoxes") as Panel;
Panel PanelTables = e.Item.FindControl("PanelTables") as Panel;
// show only first structure
if (e.Item.ItemIndex != 0)
{
PanelTextBoxes.Visible = false;
PanelTables.Visible = false;
}
}
}
// Calls child Repeater on Binding Data
protected void RepeaterTable1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// check Repeater item type is not in edit mode
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//.. here is code when child repeater is binding
}
}
// Calls child Repeater on Binding Data
protected void RepeaterTable2_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
// check Repeater item type is not in edit mode
if (e.Item.ItemType == ListItemType.Item ||
e.Item.ItemType == ListItemType.AlternatingItem)
{
//.. here is code when child repeater is binding
}
}
A Demo Image is:
Update:
If you don't want to repeat the whole structure then just add below code in RepeaterTable_ItemDataBound
event:
Panel PanelTextBoxes = e.Item.FindControl("PanelTextBoxes") as Panel;
Panel PanelTables = e.Item.FindControl("PanelTables") as Panel;
if (e.Item.ItemIndex != 0)
{
PanelTextBoxes.Visible = false;
PanelTables.Visible = false;
}
Not repeating the whole structure image demo:
这篇关于将表格插入中继器内的单个单元格中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!