复制ListView并将其显示在新页面上

本文关键字:新页面 显示 ListView 复制 | 更新日期: 2023-09-27 18:17:00

我试图将ListView从一个类复制到另一个类,并在新的aspx页面上显示ListView。我正在做的是我从第一个ListView中选择某些值,只有这些项目将显示在新页面上。但是,我不知道如何在新页面上显示ListView,因为我习惯使用SqlDataSource。我通过addList方法传递ListView,我已经在新的aspx文件中创建了一个新的ListView。请让我知道最好的方法来处理这个问题,如果我需要添加更多的信息。

头等舱代码

public void CloneButton_Click(object sender, EventArgs e)
    {
        String droplist = DropDownList2.SelectedValue;
        list = new ListView();
        if (String.IsNullOrEmpty(droplist))
        {
            ScriptManager.RegisterStartupScript(this, GetType(), "error", "alert('Please select a Program Name and Report Period');", true);
            return;
        }
        else
        {
            if (ListView1.Items.Count == 0)
            {
                Button1_Click(sender, e);
            }
            else
            {
                var selectAllCheckBox = (CheckBox)ListView1.InsertItem.FindControl("CheckBox2");
                if (selectAllCheckBox.Checked == true)
                {
                    list = ListView1;
                    Response.Redirect("~/CloneReport.aspx");
                    return;
                }
                for (int i = 0; i < ListView1.Items.Count; i++)
                {
                    CheckBox chk = (CheckBox)ListView1.Items[i].FindControl("CheckBox1");
                    if (chk.Checked == true)
                    {
                        list.Items.Add(ListView1.Items[i]);
                    }
                }
                CloneReport rep = new CloneReport();
                rep.addList(list);
                Response.Redirect("~/CloneReport.aspx");
            }
        }
    }

二类代码

public void addList(ListView list)
{
    ListView1 = new ListView();
    for (int i = 0; i < list.Items.Count; i++)
    {
        ListView1.Items.Add(list.Items[i]);
    }
    ListView1.DataBind();
}

ListView项目模板来自旧页面(我从页面转移过来)

                    <ItemTemplate>
                        <tr style="background-color: #E0FFFF; color: #333333;">
                            <td>
                                <asp:CheckBox ID="CheckBox1" runat="server" />
                            </td>
                            <td>
                                <asp:Button ID="EditButton" runat="server" CommandName="Edit" Text="Edit" />
                                <asp:Button ID="DeleteButton" runat="server" CommandName="Delete" Text="Delete" />
                            </td>
                            <td>
                                <asp:Label ID="FormTitleLabel" runat="server" Text='<%# Eval("FormTitle") %>' />
                            </td>
                            <td>
                                <asp:Label ID="FormSectionLabel" runat="server" Text='<%# Eval("FormSection") %>' />
                            </td>
                            <td>
                                <asp:Label ID="SubSectionLabel" runat="server" Text='<%# Eval("SubSection") %>' />
                            </td>
                            <td>
                                <asp:Label ID="SectionItemLabel" runat="server" Text='<%# Eval("SectionItem") %>' />
                            </td>
                            <td>
                                <asp:Label ID="SortOrder" runat="server" Text='<%# Eval("SortOrder") %>' />
                            </td>
                            <td>
                                <asp:Label ID="SectionSortOrder" runat="server" Text='<%# Eval("SectionSortOrder") %>' />
                            </td>
                            <td>
                                <asp:Label ID="SubSectionSortOrder" runat="server" Text='<%# Eval("SubSectionSortOrder") %>' />
                            </td>
                            <td>
                                <asp:Label ID="RuleDesc" runat="server" Text='<%# Eval("RuleDesc") %>' />
                            </td>
                            <td>
                                <asp:Label ID="ControlType" runat="server" Text='<%# Eval("ControlType") %>' />
                            </td>
                            <td>
                                <asp:Label ID="CrossItem" runat="server" Text='<%# Eval("CrossItem") %>' />
                            </td>
                        </tr>
                    </ItemTemplate>

更新面板的触发器

<Triggers>
            <asp:AsyncPostBackTrigger ControlID="DropDownList1" />
            <asp:AsyncPostBackTrigger ControlID="Button1" />
            <asp:AsyncPostBackTrigger ControlID="CloneButton" />
        </Triggers>
        <ContentTemplate>
            <div style="text-align: center;">
                <asp:Button ID="CloneButton" runat="server" Text="Clone Report Period" OnClick="CloneButton_Click" />
            </div>
            <div  style="text-align: center; position: absolute; margin-left: auto; margin-right: auto; left: 0; right: 0">
                <b>Program Name</b>
                <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" DataSourceID="SqlDataSource2" DataTextField="Program" DataValueField="ProgramID">
                </asp:DropDownList>
                &nbsp &nbsp
                <b>Report Period</b>
                <asp:DropDownList ID="DropDownList2" runat="server" DataSourceID="SqlDataSource3" DataTextField="ReportLabel" DataValueField="DataCollectionPeriodID" Height="21px" Width="172px">
                </asp:DropDownList>
                <asp:Button ID="Button1" runat="server" Height="30px" OnClick="Button1_Click" Text="Search" />
            </div>

复制ListView并将其显示在新页面上

你不能在页面之间传输ListView对象,但是你可以使用Server.Transfer来实现。

第一页:

DataTable dtTable;
public DataTable DataTransferTable
{
   get { return dtTable; }
}

protected void btnSubmit_Click(object sender, EventArgs e)
{
    lstTransferView = new ListView();
    DataView dtView = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);
    dtTable = new DataTable();
    dtTable = dtView.ToTable().Clone();
    DataRow dtRow;
    foreach (ListViewDataItem lstItem in lstView.Items)
    {
         if (((CheckBox)lstItem.FindControl("chkBox")).Checked)
         {               
             dtRow = (DataRow)dtView.Table.Rows[lstItem.DataItemIndex];                                        
             dtTable.ImportRow(dtRow);
         }
    }
    Server.Transfer("~/SecondPage.aspx");
}

第二页:

public FirstPageClass ftPage;    
DataTable dtNewTable;
protected void Page_Load(object sender, EventArgs e)
{ 
     if (!Page.IsPostBack)
           ftPage= (FirstPageClass)Context.Handler;
     dtNewTable = (DataTable)ftPage.DataTransferTable;
     lstSecondView.DataSource = dtNewTable;
     lstSecondView.DataBind();              
}