2012-06-25 2 views
0

Я просмотрел другой пост, но ничего не объяснил, что я хочу делать очень хорошо.Добавление события с одним кликом к нескольким кнопкам ссылок

Во время выполнения я х количество LinkButtons добавляется в форме повторителя в зависимости от данных, которые он извлекает из базы данных:

<asp:Repeater ID="variantRepeat" runat="server" 
    onitemcommand="variantRepeat_ItemCommand"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <ItemTemplate><li><asp:LinkButton ID="varLink" runat="server" CommandName="Click" CommandArgument='<%# Eval("variantID") %>'><%# Eval ("variant_name") %></asp:LinkButton></li></ItemTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
</asp:Repeater> 

Это, как предполагается, при нажатии на огонь событие кулисы

protected void varLink_Click(object sender, EventArgs e) 
    { 
     ViewCollection views = prodView.Views; 
    } 

Затем настройте несколько видов. Однако мне нужно, чтобы CommandArgument проходил, так как в нем содержится ключ для поиска внутри prodView.Views.

Это не должно быть variantID, которое передается, но может быть и Int, в зависимости от того, какое именно, просто нужно указать, какой вид отображать!

У меня есть все виды, созданные на странице init и динамически добавленные в init.

Я использую структуру сущности для запроса базы данных через несколько просмотров! (выяснили, что проще получить сложные данные из реляционных баз данных!)

Я не знаю, как связать все эти LinkButtons, чтобы я мог программно переключать виды?

ответ

1

Вот более подробный код:

ASPX: за

<asp:TextBox runat="server" ID="txtVariant" /> 

<asp:Repeater ID="variantRepeat" runat="server" 
    OnItemCommand="variantRepeat_ItemCommand"> 
    <HeaderTemplate><ul></HeaderTemplate> 
    <ItemTemplate> 
     <li> 
      <asp:LinkButton ID="varLink" runat="server" CommandName="Click" 
       CommandArgument='<%# Eval("variantID") %>'> 
       <%# Eval ("variant_name") %></asp:LinkButton> 
      </li> 
     </ItemTemplate> 
    <FooterTemplate></ul></FooterTemplate> 
</asp:Repeater> 

Код:

[Serializable] 
public class Variant 
{ 
    public Variant() { } 
    public int variantID { get; set; } 
    public string variant_name { get; set; } 
} 

public partial class _Default : System.Web.UI.Page 
{ 

    public Variant[] Variants 
    { 
     get 
     { 
      if (ViewState["Variants"] == null) 
       return new Variant[] { }; 
      return (Variant[])ViewState["Variants"]; 
     } 
     set { ViewState["Variants"] = value; } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Variants = new Variant[] { 
       new Variant() { variantID = 1, variant_name = "T1" }, 
       new Variant() { variantID = 2, variant_name = "T2" } 
      }; 
      variantRepeat.DataSource = Variants; 
      variantRepeat.DataBind(); 
     } 
    } 

    protected void variantRepeat_ItemCommand(object source, RepeaterCommandEventArgs e) 
    { 
     switch (e.CommandName) 
     { 
      case "Click": 
       var variant = Variants.FirstOrDefault(v => v.variantID.ToString() == e.CommandArgument.ToString()); 
       if (variant != null) 
       { 
        txtVariant.Text = variant.variantID.ToString(); 
        // show the right view 
       } 
       break; 
     } 
    } 
} 

код использует ViewState в качестве хранения контейнера, но вы также можете использовать сеанс.

+0

Можете ли вы привести еще несколько примеров кода? –

+0

См. Обновленный код. Это рабочий пример, но вы должны получить эту идею. – Candide

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