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.
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.
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>
This behavior is by design.
Currently, the
DataGrid does not automatically generate columns for the following SQL data types. Also, you can use either of the preceding workarounds for these types:
- Binary
- Image
- Sqlvariant
- Timestamp
- Uniqueidentifier
- Varbinary
Steps to Reproduce the Behavior
NOTE: You must have a table that contains one or more fields of type
UniqueIdentifier or any of the SQL data types mentioned in the "More Information" section of this article. Make sure that you have some data in that table.
- Create a new ASP.NET Web application by using Microsoft Visual Basic .NET or Microsoft Visual C# .NET.
- Drag a DataGrid control from the Toolbox onto the Web form.
- Drag a SQLDataAdapter control onto the Web form. Follow these steps in the DataAdapter Configuration Wizard to set the connection properties:
- Click New Connection to create a new connection to your SQL database. Select the server, the logon information, and the database that you want.
- Under Choose a Query type, select SQL Statements, and then click Next. Type the following SQL statement. Replace mytable with the name of the table that contains a UniqueIdentifier column:
- Click Finish.
- Right-click DataAdapter, and then click the Generate Dataset command.
- Set the DataSource property of the DataGrid to the generated DataSet.
- In the Designer, double-click the .aspx page to go to the Code-behind window. In the page_Load event, paste the following code. Replace mytable with your table name.
Microsoft Visual Basic
sqlDataAdapter1.Fill(dataSet11, "mytable")
DataGrid1.DataBind()
Microsoft C#
sqlDataAdapter1.Fill(dataSet11,"mytable");
DataGrid1.DataBind();
- Build the project, and then view the .aspx page in the browser. Notice that DataGrid does not display a column for the UniqueIdentifier field.
For more information, visit the following Microsoft Web sites: