在asp.net中使用Datalist?

时间:2010-01-12 03:47:46

标签: asp.net

早上好。

我在我的项目中放置了一个数据列表,当我点击该链接按钮时,我会在该行中打开一个带有文本框和按钮的面板。它工作正常,但我的问题是,如果我点击行面板的一个链接按钮将打开,当我点击第二行链接按钮时,第二行面板打开但第一行面板没有关闭。我认为你明白了我的意见我会再次解释这是我的代码检查

<form id="form1" runat="server">
<div>
<asp:DataList ID="Mydatalist" runat ="Server"
              OnItemCommand="Mydatalist_ItemCommand" >
  <ItemTemplate >
    <table >
      <tr>
        <td>
          <asp:Label ID="lblcouname" runat ="server"
                     Text ='<%# Eval("country_name") %>'></asp:Label>
        </td>
        <td> 
          <asp:LinkButton ID="lnkrepl" Text="reply"
                          CommandName ="reply" runat ="server"
                          CommandArgument ='<%# Eval("country_id") %>'>
          </asp:LinkButton>
        </td>
      </tr>
    </table>
    <div>
       <asp:Panel ID="mypane" runat ="Server" Visible ="false"  >
         <asp:TextBox ID="txtpane" runat ="Server" ></asp:TextBox><br />
         <asp:Button ID="btnInsert" runat="Server" Text ="Insert" />
       </asp:Panel>
    </div>
  </ItemTemplate>
</asp:DataList>
</div>
</form>

代码背后:

public partial class Datlist : System.Web.UI.Page
{
SqlConnection con; SqlDataAdapter da; DataSet ds;
protected void Page_Load(object sender, EventArgs e)
{
    con = new SqlConnection(
         @"server=msmsm;database=pop;user id=sa;password=abc");
    con.Open();
    if (!IsPostBack)
    {
        getCountry();
    }
}
public void getCountry()
{
    string sqr="select * from country";
    da=new SqlDataAdapter (sqr,con);
    ds = new DataSet();
    da.Fill(ds,"country");
    Mydatalist.DataSource = ds.Tables[0];
    Mydatalist.DataBind();
}
protected void Mydatalist_ItemCommand(object source, DataListCommandEventArgs e)
{
    Panel pn = (Panel)e.Item.FindControl("mypane");
    pn.Visible = false;
    if (e.CommandName == "reply")
    {

        pn.Visible = true;
    }
}
}

1 个答案:

答案 0 :(得分:0)

你必须以可编程方式隐藏它。 DataList应该有一个items属性,因此你可以遍历所有项目,使用FIndControl查找面板控件,并将其可见性设置为false。

编辑:所以你需要这样做:

private void HideItems()
{
    foreach (var item in this.dl.Items)
    {
       var panel = item.FindControl("mypane") as Panel;
       if (panel != null)
           panel.Visible = false;
     }
}

在ItemCommand中,调用此方法隐藏所有现有控件的面板。