Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 在RowDatabound vb.net GridView中使用数据绑定时出错_Asp.net_Vb.net_Gridview - Fatal编程技术网

Asp.net 在RowDatabound vb.net GridView中使用数据绑定时出错

Asp.net 在RowDatabound vb.net GridView中使用数据绑定时出错,asp.net,vb.net,gridview,Asp.net,Vb.net,Gridview,请参阅下面的代码。我试图在GridView控件中编辑时填充下拉列表 Private Function GetSiteSelection() As DataTableReader ''' some code to return DataTableReader End Function Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handle

请参阅下面的代码。我试图在GridView控件中编辑时填充下拉列表

 Private Function GetSiteSelection() As DataTableReader

    ''' some code to return DataTableReader

End Function

Protected Sub GridView1_RowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs) Handles GridViewAttachedStation.RowDataBound

    If e.Row.RowType = DataControlRowType.DataRow Then

        Dim dtrSiteSel As Data.DataTableReader = Nothing

        If e.Row.RowState = DataControlRowState.Edit Then

            Dim SiteName As DropDownList = DirectCast(e.Row.FindControl("DropDownListType"), DropDownList)

            SiteName.DataSource = GetSiteSelection()
            SiteName.DataTextField = "CODE_NAME"
            SiteName.DataValueField = "CODE_ID"
            SiteName.DataBind() <-- Error is here

        End If

    End If
End Sub
模拟为requestred:这适用于简单文本框,但不适用于下拉列表。我参考了其他来源,但大多数都使用相同的方法-这是行不通的

<asp:GridView ID="GridView1"
            runat="server"
            AutoGenerateColumns="False"
            Width="100%"
            CellPadding="0"
            BorderStyle="None"
            AllowSorting="true"
            OnRowEditing="OnRowEditing">
            <AlternatingRowStyle CssClass="tblAtlData"></AlternatingRowStyle>
            <RowStyle ForeColor="Black" CssClass="tblData"></RowStyle>
            <FooterStyle CssClass="tblHeader"></FooterStyle>
            <PagerStyle Font-Bold="True" HorizontalAlign="Left" ForeColor="BlueViolet" CssClass="tblData"></PagerStyle>
            <HeaderStyle CssClass="tblHeader" ForeColor="White"></HeaderStyle>
            <Columns>

                <asp:TemplateField HeaderText="EDIT">
                    <ItemTemplate>
                        <asp:LinkButton ID="EditLinkButton" Text="Edit" Font-Bold="true" CommandName="Edit" runat="server"
                            CommandArgument='<%# Eval("STATION ID") %>' />
                    </ItemTemplate>
                    <ItemStyle HorizontalAlign="Center" />
                    <HeaderStyle Width="5%" />
                    <EditItemTemplate>
                        <asp:LinkButton ID="UpdateLinkButton" Text="Update" Font-Bold="true" CommandName="Update" runat="server"
                            CommandArgument='<%# Eval("STATION ID") %>' />
                        <asp:LinkButton ID="CancelLinkButton" Text="Cancel" Font-Bold="true" runat="server"  OnClick="OnCancel" />

                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:TemplateField HeaderText="Site Selection Type">
                    <ItemTemplate>
                        <asp:Label ID="lblSiteSelection" runat="server" Text='<%# Eval("Site") %>' />
                    </ItemTemplate>
                    <ItemStyle Width="10%" CssClass="GeneralText" />
                    <HeaderStyle Width="10%" /> 
                    <EditItemTemplate>
                      <asp:DropDownList runat="server" ID="DropDownListTypeNameRow" CssClass="GeneralText"
                        onkeydown="typeAhead()" AutoPostBack="true" DataTextField='<%# Eval("SiteSelectionType") %>' />
                    </EditItemTemplate>
                </asp:TemplateField>

            </Columns>
        </asp:GridView>

该错误表示您试图在不支持数据绑定的属性中使用
DataBinder.Eval
方法

DropDownList
设置应用于解决以下问题:

<asp:DropDownList runat="server" ID="DropDownListTypeNameRow" CssClass="GeneralText"
                  onkeydown="typeAhead()" AutoPostBack="true"
                  DataTextField="CODE_NAME" DataValueField="CODE_ID"
                  SelectedValue='<%# Eval("SiteSelectionType") %>' />
属性已设置为“代码隐藏”中的列/字段名,您还应将其设置为具有相同名称的标记,即
code\u name


如果要在对应行的每个下拉列表中显示默认选定值,则应将
Eval
部分放在属性中。

ASP.Net GridView,其中DropDownList位于TemplateField的ItemTemplate中

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" OnRowDataBound="OnRowDataBound">
    <Columns>
        <asp:BoundField HeaderText="Name" DataField="ContactName" />
        <asp:TemplateField HeaderText = "Country">
            <ItemTemplate>
                <asp:Label ID="lblCountry" runat="server" Text='<%# Eval("Country") %>' Visible = "false" />
                <asp:DropDownList ID="ddlCountries" runat="server">
                </asp:DropDownList>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>


Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
    If Not IsPostBack Then
        GridView1.DataSource = GetData("SELECT ContactName, Country FROM Customers")
        GridView1.DataBind()
    End If
End Sub

Private Function GetData(query As String) As DataSet
    Dim conString As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
    Dim cmd As New SqlCommand(query)
    Using con As New SqlConnection(conString)
        Using sda As New SqlDataAdapter()
            cmd.Connection = con
            sda.SelectCommand = cmd
            Using ds As New DataSet()
                sda.Fill(ds)
                Return ds
            End Using
        End Using
    End Using
End Function

Protected Sub OnRowDataBound(ByVal sender As Object, ByVal e As GridViewRowEventArgs)
    If (e.Row.RowType = DataControlRowType.DataRow) Then

       'Find the DropDownList in the Row.
        Dim ddlCountries As DropDownList = CType(e.Row.FindControl("ddlCountries"), DropDownList)
        ddlCountries.DataSource = GetData("SELECT DISTINCT Country FROM Customers")
        ddlCountries.DataTextField = "Country"
        ddlCountries.DataValueField = "Country"
        ddlCountries.DataBind()

        'Add Default Item in the DropDownList.
        ddlCountries.Items.Insert(0, New ListItem("Please select"))

        'Select the Country of Customer in DropDownList.
        Dim country As String = CType(e.Row.FindControl("lblCountry"), Label).Text
        ddlCountries.Items.FindByValue(country).Selected = True
    End If
End Sub

受保护的子页_Load(ByVal sender作为对象,ByVal e作为事件args)处理Me.Load
如果不是的话,我会回来的
GridView1.DataSource=GetData(“从客户中选择联系人姓名、国家”)
GridView1.DataBind()
如果结束
端接头
专用函数GetData(查询为字符串)作为数据集
Dim conString As String=ConfigurationManager.ConnectionString(“constr”).ConnectionString
Dim cmd作为新的SqlCommand(查询)
将con用作新的SqlConnection(构造)
将sda用作新的SqlDataAdapter()
cmd.Connection=con
sda.SelectCommand=cmd
使用ds作为新数据集()
sda.填充(ds)
返回ds
终端使用
终端使用
终端使用
端函数
受保护的子OnRowDataBound(ByVal发送方作为对象,ByVal e作为GridViewRowEventArgs)
如果(e.Row.RowType=DataControlRowType.DataRow),则
'查找行中的DropDownList。
Dim ddlCountries As DropDownList=CType(e.Row.FindControl(“ddlCountries”),DropDownList)
ddlCountries.DataSource=GetData(“从客户中选择不同的国家”)
ddlCountries.DataTextField=“国家”
ddldcountries.DataValueField=“国家”
ddl.DataBind()
'在下拉列表中添加默认项。
ddlCountries.Items.Insert(0,新列表项(“请选择”))
'在下拉列表中选择客户所在的国家/地区。
Dim country As String=CType(e.Row.FindControl(“lblCountry”),Label)。文本
ddlCountries.Items.FindByValue(country).Selected=True
如果结束
端接头

只需删除该条件即可

If e.Row.RowState = DataControlRowState.Edit Then

您能否同时显示
DropDownList
GridView
的标记?可能您正在以不正确的方式使用
Bind
Eval
,例如添加不支持数据绑定的条件块/语句。已添加。先谢谢你。如果您有其他参考资料,请告诉我。请尝试以下方式:
。可能
DataTextField
属性不支持直接
Eval()
的数据绑定。运气不好。显示空白dropdownnope,这也不起作用。此外,我认为我们必须在代码隐藏中执行绑定。您是否建议在更改后编写一些代码?如果是,请给我看看。
If e.Row.RowState = DataControlRowState.Edit Then