0

我正在尝试切换显示子网数据(childList)。下面的代码工作正常,但无法切换显示。当我单击 (+) 符号时,ChildList dataList 会展开并显示列表子集数据 (Contact)。但是,当 childList 数据展开时,我想将 (+) 更改为 (-)。当用户点击 (-) 时,它会向后折叠(子列表消失)

知道怎么做吗?一个示例代码会很棒,因为我是 ASP.NET 的新手。

<table width="595px">
    <asp:DataList BackColor="#ffffff" id="DataList1" DataSourceID="dsCompanyList"  runat="server" Width="100%" DataKeyField="Company">     
        <ItemTemplate>
           <tr>
              <td>
                  <asp:LinkButton ID="LinkButton1" runat="server" Text="+" CommandArgument='<%#Container.ItemIndex%>'
                    OnCommand="LinkButton1_Command"  
                    ></asp:LinkButton>    
              </td>
              <td><%#Eval("Row")%></td>
              <td><%#Eval("Company")%></td>
           </tr>
           <asp:Panel ID="pnlChildView" runat="server">
               <asp:DataList ID="childList" runat="server" Width="100%">
                   <ItemTemplate>
                       <tr>
                          <td><%#Eval("FirstName")%></td>
                          <td><%#Eval("LastName")%></td>                        
                       </tr>
                   </ItemTemplate>
               </asp:DataList>
           </asp:Panel>
        </ItemTemplate>
    </asp:DataList>
</table>

代码背后:

public partial class _CompanyList2 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    protected void LinkButton1_Command(object sender, CommandEventArgs e)
    {
        //pass index of item in command argument
        int itemIndex = Convert.ToInt32(e.CommandArgument);

        //depending on your needs bind the details on demand
        //or preload during ItemDataBound 

        Panel childViewPanel = (Panel)DataList1.Items[itemIndex].FindControl("pnlChildView");
        if (childViewPanel != null)
        {
            //toggle visibility of childViewPanel and bind child list if panel is visible

            DataList childList = (DataList)childViewPanel.FindControl("childList");
            if (childList != null)
            {
                //int keyValue = (int)DataList1.DataKeys[itemIndex];
                string keyValue = (string)DataList1.DataKeys[itemIndex];
                using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["connApps"].ConnectionString))
                {
                    con.Open();
                    using (SqlCommand cmd = new SqlCommand("SELECT FirstName, LastName FROM dbo.Import_CompanyContact WHERE REPLACE(Company, '''', '') = '" + keyValue + "'", con))
                    {
                        cmd.CommandType = CommandType.Text;
                        using (SqlDataReader dr = cmd.ExecuteReader())
                        {
                            childList.DataSource = dr;
                            childList.DataBind();
                        }
                    }
                }
            }
        }
    }

}
4

0 回答 0