System.Web.HttpException: 在所选数据源上找不到名称为 'Rfi_Id' 的字段或 属性

System.Web.HttpException: A field or property with the name 'Rfi_Id' was not found on the selected data source

我查看了网站上的其他答案,但似乎无法正常工作。

我正在尝试从两个 table 中提取数据并将结果加载到一个网格视图中。

这是我正在使用的代码:

private void DisplayReport()
    {
        string l_strsql = "";

        l_strsql = " SELECT t_WebDAG_Rfi.Rfi_Id AS 'RFI ID #', " +
                    " t_WebDAG_Rfi.Record_Id AS 'Record ID', " +
                    " tbl_DemoData.UserPin AS 'User PIN', " +
                    " t_WebDAG_Rfi.Subject, " +
                    " t_WebDAG_Rfi.Rfi_Status_Type AS 'Status', " +
                    " t_WebDAG_Rfi.Request_By AS 'Initiator', " +
                    " t_WebDAG_Rfi.Request_Date AS 'Date Requested', " +
                    " t_WebDAG_Rfi.RFI_Comment AS 'Comments', " +
                    " t_WebDAG_Rfi.Form AS 'Form / Survey' " +
                    " FROM t_WebDAG_Rfi " +
                    " FULL OUTER JOIN tbl_DemoData " +
                    " on tbl_DemoData.RecNum=t_WebDAG_Rfi.Record_Id ";

        SqlDataAdapter da = new SqlDataAdapter(l_strsql, strConnection);
        DataSet ds = new DataSet();
        da.Fill(ds);
        DataRow dr; 

        ds.AcceptChanges();

        grdvwReport.DataSource = ds.Tables[0];
        grdvwReport.DataBind();

这是我的 .aspx table 视图:

<asp:datagrid id="grdvwReport" runat="server" BorderStyle="Outset" 
                BorderColor="Black" Width="800px"
                Height="270px" ShowFooter="True" AutoGenerateColumns="False" BorderWidth="2px" 
                CssClass=".RightLine">
                <FooterStyle HorizontalAlign="Center" ForeColor="White" BackColor="SteelBlue" Height="10" Font-Bold="True"></FooterStyle>
                <AlternatingItemStyle HorizontalAlign="Center" BackColor="#DCDCDC"></AlternatingItemStyle>
                <ItemStyle HorizontalAlign="Center" BackColor="WhiteSmoke" Height="10"></ItemStyle>
                <HeaderStyle Font-Size="Smaller" Font-Bold="True" HorizontalAlign="Center" BorderWidth="4px"
                    ForeColor="White" BorderStyle="Outset" BackColor="SteelBlue" Height="10" Wrap="True"></HeaderStyle>
                <Columns>
                    <asp:BoundColumn DataField="Rfi_Id" HeaderText="RFI ID #"><ItemStyle HorizontalAlign="Left"></ItemStyle></asp:BoundColumn>
                    <asp:BoundColumn DataField="Record_Id" HeaderText="Record ID"></asp:BoundColumn>
                    <asp:BoundColumn DataField="UserPin" HeaderText="User PIN"></asp:BoundColumn>
                    <asp:BoundColumn DataField="Subject" HeaderText="Subject"></asp:BoundColumn>
                    <asp:BoundColumn DataField="Rfi_Status_Type" HeaderText="Status"></asp:BoundColumn>
                    <asp:BoundColumn DataField="Request_By" HeaderText="Initiator"></asp:BoundColumn>
                    <asp:BoundColumn DataField="Request_Date" HeaderText="Date Requested"></asp:BoundColumn>
                    <asp:BoundColumn DataField="RFI_Comment" HeaderText="Comments"></asp:BoundColumn>
                </Columns>
            </asp:datagrid>

您正在为查询中的列设置别名:

t_WebDAG_Rfi.Rfi_Id AS 'RFI ID #'

但是您在代码中使用了实际的列名称:

DataField="Rfi_Id"

删除别名,它应该可以工作:

t_WebDAG_Rfi.Rfi_Id

您似乎在尝试使用别名来创建人类可读的列。但这是 UI 的工作,而不是查询。 UI 已经在这样做了。因此,只需通过不使用所有这些别名来简化查询。