Получите скрытое значение поля

Так как пробел имеет семантическое значение в Python, некоторые методы перехода на новую строку могли привести к неправильным или неоднозначным результатам, таким образом, должен быть некоторый предел для предотвращения тех ситуаций. 80 символьных длин строки были стандартными, так как мы использовали телетайпы, таким образом, 79 символов походят на довольно безопасный выбор.

5
задан Jason Plank 29 November 2011 в 17:13
поделиться

5 ответов

Проблема в том, что когда для свойства Visibility BoundField установлено значение false, столбец не отображается для клиента. Чтобы обойти эту проблему, можно вместо этого использовать HiddenField внутри TemplateField .

<asp:TemplateField>
    <ItemTemplate>
        <asp:HiddenField ID="HiddenField1" runat="server" 
                         Value='<%# Eval("BirthDate") %>' />
    </ItemTemplate>
    <EditItemTemplate>
        <asp:HiddenField ID="HiddenField1" runat="server" 
                         Value='<%# Eval("BirthDate") %>' />
    </EditItemTemplate>
</asp:TemplateField>
protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridViewRow row = GridView.Rows[e.NewEditIndex];     
    HiddenField  hidden = (HiddenField)row.Cells[0].FindControl("HiddenField1");
    DateTime birthDate = Convert.ToDateTime(hidden.Value);
}

EDIT

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

<style type="text/css">
    .hide
    {
        display:none;
    }
</style>

<asp:BoundField DataField="BirthDate">
    <ItemStyle CssClass="hide"/>
</asp:BoundField>
protected void GridView_RowEditing(object sender, GridViewEditEventArgs e)
{
    GridViewRow row = GridView1.Rows[e.NewEditIndex];
    DateTime birthDate = Convert.ToDateTime(row.Cells[1].Text);
}
9
ответ дан 18 December 2019 в 09:50
поделиться

Я сделал что-то вроде этого (адаптируясь к вашему примеру):

string[] keyList = new string[1];   
keyList[0] = "BirthDate";  
myGridView.DataKeyNames = keyList;

Затем я связал GridView с DataTable, у которого есть столбец с именем «BirthDate». Данные в этом столбце будут храниться с указанным выше DataKeyName.

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

protected void myGridView_RowEditing(object sender, GridViewEditEventArgs e)  
{   
  DataKeyArray keyList = myGridView.DataKeys as DataKeyArray;
  if (keyList != null)       
    DateTime birthDate = keyList[e.NewEditIndex];    
}

Я понимаю, что это не касается скрытых полей, однако.

2
ответ дан 18 December 2019 в 09:50
поделиться

Ознакомьтесь со следующей статьей, в которой показано, как получить доступ к невидимым столбцам GridView:

http://www.highoncoding.com/Articles /178_Access_GridView_Invisible_Columns.aspx

Идея состоит в том, чтобы в основном использовать столбец TemplateField вместо BoundColumn.

1
ответ дан 18 December 2019 в 09:50
поделиться

это один из способов получить данные из базовых данных

protected void myGridView_RowEditing(object sender, GridViewEditEventArgs e)
{
  GridViewRow row = gvUsers.Rows[e.NewEditIndex];
DateTime birthDate = Convert.ToDateTime(DataBinder.Eval(row.DataItem, "BirthDate"));
}
0
ответ дан 18 December 2019 в 09:50
поделиться

Я бы использовал предложение скрытого поля, которое предложил Федрус, а затем в вашем коде; используйте что-то вроде этого:

GridViewRow row = gvUsers.Rows[e.NewEditIndex];
var hfBirthDate = (HiddenField)row.FindControl("hfBirthDate");
DateTime birthDate = DateTime.Parse(hfBirthDate.Value);
0
ответ дан 18 December 2019 в 09:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: