Получить значение столбца, который использует ButtonField - PullRequest
0 голосов
/ 28 февраля 2012

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

GridViewRow row = GridView1.SelectedRow;

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

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

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

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

РЕДАКТИРОВАТЬ: Это мой код поля кнопки внутри моего GridView: <asp:ButtonField DataTextField="Customer" HeaderText="Customer" ButtonType="Link" CommandName="Select" />

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

protected void gvManagerCustomers_SelectedIndexChanged(object sender, EventArgs e)

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012

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

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

1 голос
/ 28 февраля 2012

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

РЕДАКТИРОВАТЬ: вот некоторый код.

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

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

0 голосов
/ 28 февраля 2012

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

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

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

РЕДАКТИРОВАТЬ: правда, точный подход выше не работает - но вы можете использовать элементы управления, следующее работает, обратите внимание, что то, что мы делаем здесь, в значительной степени изобилует плохими методами (но тогда мы в конце концов, мы используем GridView для удобства).

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

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

РЕДАКТИРОВАТЬ просто чтобы упомянуть очевидное - столбец здесь жестко запрограммирован - вам, вероятно, придется его изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...