2012-02-27 3 views
0

У меня есть GridView и один из столбцов имеет TemplateField с использованием LinkButton (ButtonField) я могу получить значение конкретной ячейки в моей сетке Просто отлично. Использование:Получить значение столбца, используя ButtonField

GridViewRow row = GridView1.SelectedRow; 

lblSalesmanCustomers.Text = row.Cells[2].Text; 

Я затем отображать текст из этой ячейки в Label.

Однако я не могу заставить это работать с шаблоном ButtonField. Он работает только с столбцом без шаблона.

Как я могу получить значение конкретной ячейки в столбце, использующем ButtonField/TemplateField?

EDIT: Это моя кнопка Код поля внутри моего GridView: <asp:ButtonField DataTextField="Customer" HeaderText="Customer" ButtonType="Link" CommandName="Select" />

Кроме того, это происходит в этом случае:

protected void gvManagerCustomers_SelectedIndexChanged(object sender, EventArgs e) 
+0

Не могли бы вы предоставить код Aspx GridView? –

+0

С 26 вопросами на сайте вы должны знать, как отформатировать код в своих сообщениях. (* И, что менее очевидно, чтобы не поставить подписи в конце. *) – jadarnel27

+0

Я еще не уверен, как отформатировать мой код. Не знаком с Markup. И что тебе все равно, если я оставлю свое имя в конце чего угодно? –

ответ

1

Я знаю, что есть проблемы с гиперссылкой и кнопочным полем, но есть работа вокруг. Предположим, что вы привязываете текст кнопки на основе столбца с именем ButtonNames, и в этом столбце у вас есть все ваши имена, такие как «кнопка bob», «button jerry» и т. Д. В GridView добавьте невидимый столбец в качестве вашего первого столбца и привяжите его значение как ButtonNames. Вы делаете его невидимым, устанавливая одно из свойств видимости. Забыл, что это было от моей головы. Затем, когда вы хотите получить текст для кнопочного поля, просто получите данные из этого невидимого столбца. То же самое относится к hyperlinkfiends.

EDIT: вот какой-то код.

<asp:BoundColumn ItemStyle-HorizontalAlign="Left" DataField="ButtonNames" SortExpression="ButtonNames" HeaderText="TriageId" Visible="false" ReadOnly="true"></asp:BoundColumn> 

Затем извлечь его через строку S = e.Item.Cells [0] .Text где е DataGridCommandEventArgs или что-то в этом роде.

+0

Это не работает. Мне пришлось использовать предложение Леона. Я получил то, что хотел. – Echiban

0

Там будет коллекция элементов управления в ячейке - вы можете иметь доступ к нему.

Хотя проще всего было бы использовать что-то вроде:

Label l = row.FindControl("myControlId"); 

EDIT: правда точный подход выше не работает - но вы можете использовать элементы управления, следующие делает работу, обратите внимание, что то, что мы делаем здесь довольно много изощренной практики (но тогда мы используем GridView для удобства в конце концов).

protected void gvManagerCustomers_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var x = ((sender as GridView).SelectedRow.Cells[0].Controls[0] as LinkButton).Text; 
} 

Для того, чтобы понять это настроить среду отладки и останова в методе обработчика затем просверлить вниз по иерархии классов. Отладчик - наш друг;)

EDIT просто для того, чтобы упомянуть очевидное - колонка здесь жестко закодирована - вам, вероятно, придется ее изменить.

+0

Я пробовал этот подход. Однако по какой-либо причине предоставление элемента управления в Datagridview ID не допускается или не поддерживается. –

2

Посмотрите, сможет ли var Button = row.Cells["Customer"].Controls[0]; получить нужную кнопку.

Возможно, вам понадобится указать его правильному типу.

+1

Это должен быть правильный ответ. Спасибо, Леон. – Echiban

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