我的 asp 页面中有一个 gridview,其中数据来自 SQL 数据源(存储过程)。我正在尝试找到一种方法将不在数据源中的列添加到 gridview:我想添加一个代表该列的 asp 标记,默认情况下使其不可见,然后以编程方式使其可见或直接创建一个代码中的新列:
<vol:VlGridView ID="gv" DelayLoadPanelId="up" OnRowCommand="gv_RowCommand" OnRowDataBound="gv_RowDataBound" EnableViewState="true" runat="server" AutoGenerateColumns="False" AllowSorting="true" AllowPaging="true" OnNew="gv_New" AbcTargetButtonId="btnSearch" AbcTargetFieldId="tbSearch" DataSourceID="sds" OnSorting="gv_Sorting" >
<columns>
<asp:boundfield datafield="CustomerID" headertext="Customer ID"/>
</columns>
</vol:VlGridView>
但是我收到以下错误:
System.Web.HttpException:在所选数据源中找不到字段“CustomerID”
最简单的方法是在使用
boundfield
或自动生成的列时向 SQL 查询添加虚拟列。
SELECT ColumnA, ColumnB, ColumnC, NULL AS CustomerID FROM table
在本例中,
CustomerID
是 NULL
,但您也可以指定其他数据类型。
123 AS CustomerID
'stringValue' AS CustomerID
如果您不想/无法更改查询,您可以添加
TemplateField
<Columns>
<asp:TemplateField HeaderText="Customer ID">
<ItemTemplate>
//stuff goes here
</ItemTemplate>
</asp:TemplateField>
</Columns>
fetch data from database and store in datatable
//call SQL helper class to get initial data
DataTable dt = sql.ExecuteDataTable("your_procedure");
dt.Columns.Add("CustomerID", typeof(System.Int32));
foreach(DataRow row in dt.Rows)
{
// code to assign values to newly created column CustomerID
row["CustomerID"] = 0; //assign value according to your requirement
}
//then bind datatable to gridview
gv.Datasource=dt;
gv.DataBind();