ASP.NET: значение GridView установлено в ноль, когда столбец не виден

StackOverflow https://stackoverflow.com/questions/416861

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

Я нашел это решение для имитации скрытых столбцов в .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, когда столбец не виден, привязка данных для этого столбца завершается неудачно, но этот метод скрывается после установления связи, поэтому он обманывает систему (?).

Другие советы

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top