Как скрыть столбец (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;
    }