#c# #asp.net #gridview #boundfield
#c# #asp.net #gridview #boundfield
Вопрос:
C # ASP.Net 4.7.2
Я создаю Gridview в коде на основе переданного набора данных. Я создаю BoundFields на лету, а затем назначаю источник данных и пытаюсь привязать данные. Этот код находится в отдельном классе. к которому я передаю заполнитель со страницы.
Вот код:
DGWorkWith = new GridView()
{
AllowPaging = true,
AllowSorting = true,
PageSize = 50,
AutoGenerateColumns = false,
BorderColor = Color.Black,
BorderWidth = 1
};
DataSet wwDS = LoadDataSet(_sDB,_sPW);
DataTable wwDT = wwDS.Tables[0];
foreach (DataColumn DC in wwDT.Columns)
{
string sColName = DC.ColumnName.ToUpper().Trim();
string sWidth = myRM.GetString(sColName "_WIDTH");
if (sWidth == null) { sWidth = "120"; }
int iWidth = Convert.ToInt32(sWidth);
//if (IsFieldChooserColumnOn(sColName)) { continue; }
// Put DataColumn in List
string sColHdr = "";
if (myRM.GetString(sColName) == null)
{
sColHdr = "???-" DC.ColumnName.ToUpper().Trim();
}
else
{
sColHdr = myRM.GetString(sColName);
}
BoundField BC = new BoundField();
BC.DataField = DC.ColumnName.Trim();
BC.HeaderText = sColHdr;
if(iWidth==0) { BC.Visible = false; }
DGWorkWith.Columns.Add(BC);
}
DGWorkWith.DataSource = wwDT;
// *** THIS DATABIND FAILS with an Object reference not set to an instance of an object.
DGWorkWith.DataBind();
TR2TC2.Controls.Add(DGWorkWith);
TR2.Cells.Add(TR2TC2);
T.Rows.Add(TR2);
placeHolder.Controls.Add(T); //T is a Table and the placeholder is fed the table.
Вызов DataBind завершается ошибкой с исключением ссылки на нулевой объект.
- DGWorkWith не равен нулю
- Все столбцы присутствуют для каждого столбца данных в таблице данных
- Имена столбцов в полях границ совпадают с именами столбцов в таблице данных.
- В таблице данных есть строки — их более 12000.
- Попытка войти в привязку данных сразу вызывает исключение.
Я полностью озадачен.
Кто-нибудь видит что-то, что я пропустил?
Спасибо! Джон.
Комментарии:
1. Что бы я ни пытался, код работает. Я не могу воспроизвести проблему… Вы уверены, что проблема не где-то еще, поскольку вы можете привязать null к GridView (
DGWorkWith.DataSource = null;
показывает пустой GridView)2. Я могу привязать null к gridview, и он не показывает ничего, кроме данных. — который имеет столбцы и строки и где каждое имя столбца соответствует имени столбца в таблице данных.
Ответ №1:
Я нашел проблему. Это было в этом коде здесь:
TR2TC2.Controls.Add(DGWorkWith);
TR2.Cells.Add(TR2TC2);
T.Rows.Add(TR2);
placeHolder.Controls.Add(T); //T is a Table and the placeholder is fed the table.
Проблема в том, что я пытался привязать данные до того, как прикрепил GridView к любому элементу управления. По-видимому, динамический GridView должен быть элементом управления где-то на странице до привязки данных.
Вау.
Microsoft настолько хороша в документировании подобных вещей.