Как получить связанный элемент из повторителя ASP.NET - PullRequest
3 голосов
/ 23 июня 2010

Мне нужно установить атрибут OnClientClick в LinkButton, но я не знаю, каково это значение, пока LinkButton не будет привязан.Я пытаюсь установить значение, когда повторитель связывается, но я не могу понять, как получить значение 'boundItem / dataContext' ...

<asp:Repeater ID="Repeater1" runat="server">
    <ItemTemplate>
        <asp:LinkButton  Text="HelloWorld" ID="Hyper1" runat="server" OnDataBinding="Repeater1_DataBinding" >
        </asp:LinkButton> 
    </ItemTemplate> 
</asp:Repeater>

protected void Page_Load(object sender, EventArgs e)
{
    var list = new List<TestObject>();
    list.Add(new TestObject() {TestValue = "testing1"});
    list.Add(new TestObject() { TestValue = "testing2" });
    list.Add(new TestObject() { TestValue = "testing3" });

    this.Repeater1.DataSource = list;
    this.Repeater1.DataBind();
}

public void Repeater1_DataBinding(object sender, EventArgs e)
{
    var link = sender as HyperLink;
    //link.DataItem ???
}

В любом случае, чтобы узнать, какой текущийстрока связана с элементом?

Ответы [ 3 ]

5 голосов
/ 23 июня 2010

Может быть, вам нужно использовать событие ItemDataBound.Он предоставляет аргумент RepeaterItemEventArgs, для которого доступен DataItem

this.Repeater1.ItemDataBound += Repeater1_ItemDataBound;

void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    var dataItem = e.Item.DataItem;
}
3 голосов
/ 23 июня 2010

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

Вы можете изменить свою функцию на:

public void Repeater1_DataBinding(object sender, EventArgs e) 
{ 
    var link = sender as HyperLink;
    string valueYouWant = Eval("TestValue").ToString();

    // You could then assign the HyperLink control to whatever you need
    link.Target = string.Format("yourpage.aspx?id={0}", valueYouWant);
} 

valueYouWant теперь имеет значениеполя TestValue для текущей строки с привязкой к данным.Использование события DataBinding - лучший способ сделать это по сравнению с ItemDataBound, поскольку вам не нужно искать элемент управления и локализовать код специально для элемента управления вместо целого шаблона.

1 голос
/ 23 июня 2010

В библиотеке MSDN это было в качестве примера обработчика события:

public void BindData(object sender, EventArgs e)
{
    Literal l = (Literal) sender;
    DataGridItem container = (DataGridItem) l.NamingContainer;
    l.Text = ((DataRowView) container.DataItem)[column].ToString();

}

(см. http://msdn.microsoft.com/en-us/library/system.web.ui.control.databinding.aspx)

Как видите, это простая демонстрация того, как получить доступ к элементу данных и получить от него данные. Адаптация этого к вашему сценарию - упражнение, оставленное читателю. :)

...