2010-01-12 2 views
0

доброе утро всем.Работа с Datalist в asp.net?

Я размещаю datalist в своем проекте в том, что я помещаю ссылку, когда я нажимаю на эту кнопку ссылки, панель откроется в этой строке с текстовым полем и кнопкой. он работает нормально, но моя проблема в том, что если я нажму на одну кнопку ссылки на панели строк, откроется, когда я нажму на кнопку ссылки второй строки, панель sencond row откроется, но панель первой строки не закрывается. Я думаю, вы получите мою точку owhter мудрый я объясню еще раз это мой код проверки из-за

<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; 
    } 
} 
} 

ответ

0

Вы должны programmably скрыть. У DataList должно быть свойство items, и вы можете пропустить все элементы, найти панель управления с помощью FIndControl и установить ее видимость на false.

EDIT: Так что вам нужно сделать:

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

В ItemCommand, вызовите этот метод, чтобы скрыть все панели существующего элемента управления.

+0

Mr.Brian Я редактирую свой вопрос, и я размещаю код, пожалуйста, проверьте –

+0

OK, ItemCommand будет только стрелять для панели, которую вы хотите установить в true; вам нужно добавить следующий код в мой пост выше. –

+0

супер работает отлично Brain спасибо за ответ –

Смежные вопросы