将表格插入中继器内的单个单元格中 [英] Insert table in a single cell inside repeater

查看:120
本文介绍了将表格插入中继器内的单个单元格中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用下面的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆