PRB: DataGrid Does Not Automatically Generate UniqueIdentifier Fields with AutoGenerateColumns=True (313155)
The information in this article applies to:
- Microsoft ASP.NET (included with the .NET Framework 1.1)
- Microsoft ASP.NET (included with the .NET Framework) 1.0
This article was previously published under Q313155 SYMPTOMS
When you use the DataGrid Web server control in your .aspx pages, corresponding columns are not generated automatically for fields of type UniqueIdentifier. This behavior occurs when the AutoGenerateColumns property for the DataGrid is set to True.
CAUSE
When you set AutoGenerateColumns=True, DataGrid internally creates a collection of autogenerated columns. If the data type of a field is not one of Primitive, String, Decimal, or DateTime, DataGrid does not generate a column for that field. Because the UniqueIdentifier data type is actually a System.GUID type, DataGrid excludes this field while generating columns. For this reason, you do not see UniqueIdentifier column when the DataGrid is displayed on the .aspx page.
RESOLUTION
To work around this behavior, use one of the following methods. Both methods involve explicitly creating a bound column for fields of type UniqueIdentifier. NOTE: You do not need to turn off the AutoGenerateColumns property. If you do turn it off, you must create every column explicitly. Otherwise, new columns that you create are added to the DataGrid in conjunction with autogenerated columns.
Method 1: Create a Column for UniqueIdentifier Field at Run Time and Add the Column to the Columns Collection- Create a new BoundColumn, and then set the DataField and HeaderText properties.
- Add the column to the Columns collection of the DataGrid.
This workaround is more useful if you do not know which fields are returned from the DataSource. In this case, you can loop through the results from the DataSource and create a column for each field on the fly. Use the following code to achieve this:
Microsoft Visual Basic .NET
Dim myBoundColumn As New BoundColumn()
myBoundColumn.DataField = "UniqueIdentifierA"
myBoundColumn.HeaderText = "UniqueIdentifierA"
DataGrid1.Columns.Add(myBoundColumn)
Microsoft Visual C# .NET
BoundColumn myBoundColumn = new BoundColumn();
myBoundColumn.DataField = "UniqueIdentifierA";
myBoundColumn.HeaderText = "UniqueIdentifierA";
DataGrid2.Columns.Add(myBoundColumn);
Method 2: Define a BoundColumn Template
If you know which fields are returned from the DataSource, you can create BoundColumn templates for the fields of type UniqueIdentifier. You must specify the DataField attribute
as the field name that you want to display. The following sample code defines a DataGrid with a BoundColumn template for the UniqueIdentifier field:
<asp:datagrid id=DataGrid1 runat="server" DataSource="<%# dataSet11 %>"
Height="288px" Width="473px">
<Columns>
<asp:BoundColumn datafield="fldUniqueIdentifier"
HeaderText="UniqueIdentifier Column"></asp:BoundColumn>
</Columns>
</asp:datagrid>
STATUS
This behavior is by design.
REFERENCES
For more information, visit the following Microsoft Web sites:
Modification Type: | Minor | Last Reviewed: | 7/8/2003 |
---|
Keywords: | kbDatabase kbDataBinding kbprb kbServerControls KB313155 kbAudDeveloper |
---|
|