向与 SQL 数据源关联的网格视图添加一列 [C#/ASP/Webform]

问题描述 投票:0回答:2

我的 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”

c# asp.net gridview
2个回答
0
投票

最简单的方法是在使用

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>

0
投票
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();
© www.soinside.com 2019 - 2024. All rights reserved.