Как скрыть столбец (GridView), но все же получить доступ к его значению?
У меня есть GridView с DataSource
(база данных SQL). Я хочу скрыть столбец, но все же могу получить доступ к значению при выборе записи. Может ли кто-нибудь показать мне, как это сделать?
Это столбец, который я хочу скрыть и хочу получить доступ к его значению:
<asp:BoundField DataField="Outlook_ID" HeaderText="OutlookID" />
Я попробовал все, чтобы скрыть столбец (свойство Visible="false"
), но я не могу получить доступ к его значению.
Ответы
Ответ 1
Если я не ошибаюсь, GridView
не содержит значения BoundColumns
, у которых есть атрибут visible="false"
. Здесь вы можете сделать две вещи: одну (как объяснено в ответе V4Vendetta), чтобы использовать Datakeys
. Или вы можете изменить BoundColumn
на TemplateField
. И в ItemTemplate
добавьте элемент управления, например Label
, сделайте его видимость ложным и укажите значение Label
.
Ответ 2
<head runat="server">
<title>Accessing GridView Hidden Column value </title>
<style type="text/css">
.hiddencol
{
display: none;
}
</style>
<asp:BoundField HeaderText="Email ID" DataField="EmailId" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" >
</asp:BoundField>
ArrayList EmailList = new ArrayList();
foreach (GridViewRow itemrow in gvEmployeeDetails.Rows)
{
EmailList.Add(itemrow.Cells[YourIndex].Text);
}
Ответ 3
Определите стиль в css:
.hiddencol { display: none; }
Затем добавьте атрибут ItemStyle-CssClass="hiddencol"
и HeaderStyle-CssClass="hiddencol"
в поле сетки:
<asp:BoundField DataField="ID" HeaderText="ID" ItemStyle-CssClass="hiddencol" HeaderStyle-CssClass="hiddencol" ClientIDMode="Static" />
Ответ 4
Вы можете использовать DataKeys для получения значения таких полей, потому что (как вы сказали), когда вы устанавливаете нормальный BoundField
как видимый false, вы не можете получить их значение.
В файле .aspx
установите свойство GridView
DataKeyNames = "Outlook_ID"
Теперь в обработчике событий вы можете получить доступ к значению этого ключа следующим образом:
grid.DataKeys[rowIndex]["Outlook_ID"]
Это даст вам идентификатор в указанном rowindex сетки.
Ответ 5
Вы можете сделать это программно:
grid0.Columns[0].Visible = true;
grid0.DataSource = dt;
grid0.DataBind();
grid0.Columns[0].Visible = false;
Таким образом вы устанавливаете столбец видимым перед привязкой данных, поэтому генерируется столбец.
Вы установили, что столбец не отображается, поэтому он не отображается.
Ответ 6
Если у вас есть TemplateField
внутри столбцов вашего GridView
, и у вас есть, скажем, элемент управления с именем blah, связанный с ним. Затем поместите outlook_id
как a HiddenField
так:
<asp:TemplateField HeaderText="OutlookID">
<ItemTemplate>
<asp:Label ID="blah" runat="server">Existing Control</asp:Label>
<asp:HiddenField ID="HiddenOutlookID" runat="server" Value='<%#Eval("Outlook_ID") %>'/>
</ItemTemplate>
</asp:TemplateField>
Теперь возьмите строку в случае, если вы хотите outlook_id
, а затем получите доступ к элементу управления.
Для RowDataBound
используйте его как:
string outlookid = ((HiddenField)e.Row.FindControl("HiddenOutlookID")).Value;
Вернитесь, если у вас есть проблемы с доступом к нажатой строке. И не забудьте указать событие, в котором вы хотели бы получить доступ.
Ответ 7
Вы можете сделать столбец hidden
на стороне сервера, и по какой-то причине это отличается от кода aspx
. На него все еще можно ссылаться, как если бы он был виден. Просто добавьте этот код в событие OnDataBound
.
protected void gvSearchResults_DataBound(object sender, EventArgs e)
{
GridView gridView = (GridView)sender;
if (gridView.HeaderRow != null && gridView.HeaderRow.Cells.Count > 0)
{
gridView.HeaderRow.Cells[UserIdColumnIndex].Visible = false;
}
foreach (GridViewRow row in gvSearchResults.Rows)
{
row.Cells[UserIdColumnIndex].Visible = false;
}
}
Ответ 8
Оставьте видимые столбцы перед заполнением GridView
. Заполните GridView
, а затем скройте столбцы.
Ответ 9
Я использовал метод, подобный user496892:
SPBoundField hiddenField = new SPBoundField();
hiddenField.HeaderText = "Header";
hiddenField.DataField = "DataFieldName";
grid.Columns.Add(hiddenField);
grid.DataSource = myDataSource;
grid.DataBind();
hiddenField.Visible = false;
Ответ 10
У меня есть новое решение, скрыть столбец на стороне клиента, используя css или javascript или jquery.
.col0
{
display: none;
}
И установите gvClientDetails.Columns[0].Visible = true;
, Если установлено значение false
.
Ответ 11
Вот как получить значение скрытого столбца в GridView
, который установлен в Visible=False
: добавить поле данных в этом случае SpecialInstructions
в свойство DataKeyNames связанного GridView и получить к нему доступ путь.
txtSpcInst.Text = GridView2.DataKeys(GridView2.SelectedIndex).Values("SpecialInstructions")
Что он, он работает каждый раз очень просто.
Ответ 12
Вы можете сделать это с кодом.
Set visible= false
для столбцов после привязки данных.
После этого вы снова сможете увидеть видимость " true" в функции row_selection из вида сетки. Это будет работать!
Ответ 13
Когда мне нужно получить доступ к некоторому значению от GridView
до появления GridView
.
- У меня есть
BoundField
и привязка DataField
.
- В событии
RowDataBound
я делаю какой-то процесс в этом случае.
-
До появления GridView
я пишу следующее:
protected void GridviewLecturer_PreRender(object sender, EventArgs e)
{
GridviewLecturer.Columns[0].Visible = false;
}