ASP.NET: значение GridView установлено в ноль, когда столбец не виден - PullRequest
1 голос
/ 06 января 2009

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

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

Ответы [ 5 ]

3 голосов
/ 06 января 2009

Я нашел это решение для имитации скрытых столбцов в .Net 2.0:

Реализация события GridView.RowCreated.

protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
    e.Row.Cells[1].Visible = false;
    e.Row.Cells[2].Visible = false;
}

Вот ссылка: http://www.beansoftware.com/ASP.NET-Tutorials/GridView-Hidden-Column.aspx

Я предполагаю, что в 2.0, когда столбец не виден, привязка данных для этого столбца завершается неудачно, но этот метод скрывается после установления связи, поэтому он обманывает систему (?).

1 голос
/ 13 февраля 2010

Microsoft рекомендует использовать свойство DataKeyNames элемента управления GridView.

Вместо использования выделенного кода для скрытия определенных столбцов вы можете просто удалить связанные поля из GridView и указать их в свойстве DataKeyNames:

<asp:GridView ID="GridView1" runat="server" 
        DataKeyNames="SalesOrderID,SalesOrderDetailID"
        DataSourceID="LinqDataSource1">

Таким образом, поля не будут отображаться пользователю, но GridView знает, как сохранить значения для обновления и т. Д.

0 голосов
/ 26 августа 2010

Когда поле внутри GridView становится невидимым, значения его ячеек становятся более недоступными или являются нулевыми или пустыми.

Чтобы решить эту проблему, вам просто нужно присвоить имена столбцов (скрытые поля) свойству DataKeyNames GridView, выполнив DataKeyNames="colName1,colName2,colName3".

Затем получите доступ к значениям их ячеек как cellValue = GridView1.DataKeys[0]["ID"].ToString();

Я написал простой пост, демонстрирующий решение вашей проблемы на здесь .

0 голосов
/ 06 января 2009

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

0 голосов
/ 06 января 2009

Если вы этого еще не сделали, я бы подумал об использовании столбцов Template для ваших данных и сделал бы «ручное» связывание данных (либо «встроенное», либо в коде страницы, используя событие RowDataBound). Таким образом, вы можете проверить DBNull и просто игнорировать помещение значения в столбец, если оно равно NULL. Это также позволит правильно скрыть столбцы.

...