C# GridView中的SQLDataSource
在过去的几天里,我一直在试图找到解决问题的办法,但到目前为止,我还没有找到。 我有一个Gridview,在编辑模式下,其中一个字段有一个DropDownList,其中包含一个使用该行其他两个字段(州和城市)的Select。我尝试了我在网上找到的关于它的一切,但我无法让它工作。你能帮我吗? 代码如下C# GridView中的SQLDataSource,c#,asp.net,gridview,sqldatasource,controlparameter,C#,Asp.net,Gridview,Sqldatasource,Controlparameter,在过去的几天里,我一直在试图找到解决问题的办法,但到目前为止,我还没有找到。 我有一个Gridview,在编辑模式下,其中一个字段有一个DropDownList,其中包含一个使用该行其他两个字段(州和城市)的Select。我尝试了我在网上找到的关于它的一切,但我无法让它工作。你能帮我吗? 代码如下 <asp:GridView ID="GridView1" runat="server" AllowSorting="True" DataKeyNames="id,Munici
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
DataKeyNames="id,Municipio,UF" DataSourceID="SqlDataSource5">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
...stuff...
<asp:TemplateField HeaderText="UF" SortExpression="UF">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("UF") %>'>
</asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UF") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Municipio" SortExpression="Municipio">
<EditItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Municipio") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Municipio") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="People" SortExpression="People">
<ItemTemplate>
<asp:Label ID="LbPeople" runat="server" Text='<%# Bind("Cultura") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList ID="DdlPeople" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSourcePeopleEdit" DataTextField="People"
DataValueField="People">
</asp:DropDownList>
<asp:HiddenField ID="Hidden1" Value='<%# Bind("Municipio") %>' runat="server"/>
<asp:HiddenField ID="Hidden2" Value='<%# Bind("UF") %>' runat="server"/>
<asp:SqlDataSource ID="SqlDataSourcePeopleEdit" runat="server"
ConnectionString="<%$ ConnectionStrings:dbdb %>"
ProviderName="<%$ ConnectionStrings:somar.ProviderName %>"
SelectCommand="SELECT People FROM Table_People WHERE (Cidade = @Municipio) AND (UF = @UF)"
CancelSelectOnNullParameter="false">
<SelectParameters>
<asp:ControlParameter ControlID="Hidden1" Name="Municipio" PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="Hidden2" Name="UF" PropertyName="Value" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
</EditItemTemplate>
</asp:TemplateField>
...stuff...
</asp:GridView>
东西
东西
我做错了什么
更新
单击“编辑”时,dropdownlist不会加载值。
如果我在SqlDataSource上设置属性CancelSelectOnNullParameter=“false”,它会显示“必须声明标量变量@xxx”
我已经检查了hiddenfields,它们加载了值,所以问题是controlparameter taht没有从中获取值,您应该做的是在dropdownlist之前有隐藏的字段和sqldatasource。您遇到的问题是由于加载数据时引起的
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
DataKeyNames="id,Municipio,UF" DataSourceID="SqlDataSource5">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
...stuff...
<asp:TemplateField HeaderText="UF" SortExpression="UF">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("UF") %>'>
</asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UF") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Municipio" SortExpression="Municipio">
<EditItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Municipio") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Municipio") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="People" SortExpression="People">
<ItemTemplate>
<asp:Label ID="LbPeople" runat="server" Text='<%# Bind("Cultura") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="Hidden1" Value='<%# Bind("Municipio") %>' runat="server"/>
<asp:HiddenField ID="Hidden2" Value='<%# Bind("UF") %>' runat="server"/>
<asp:SqlDataSource ID="SqlDataSourcePeopleEdit" runat="server"
ConnectionString="<%$ ConnectionStrings:dbdb %>"
ProviderName="<%$ ConnectionStrings:somar.ProviderName %>"
SelectCommand="SELECT People FROM Table_People WHERE (Cidade = @Municipio) AND (UF = @UF)"
CancelSelectOnNullParameter="false">
<SelectParameters>
<asp:ControlParameter ControlID="Hidden1" Name="Municipio" PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="Hidden2" Name="UF" PropertyName="Value" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="DdlPeople" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSourcePeopleEdit" DataTextField="People"
DataValueField="People">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
...stuff...
</asp:GridView>
东西
东西
您应该做的是在dropdownlist之前有隐藏字段和sqldatasource。您遇到的问题是由于加载数据时引起的
<asp:GridView ID="GridView1" runat="server" AllowSorting="True"
DataKeyNames="id,Municipio,UF" DataSourceID="SqlDataSource5">
<AlternatingRowStyle BackColor="White" />
<Columns>
<asp:CommandField ShowEditButton="True" />
...stuff...
<asp:TemplateField HeaderText="UF" SortExpression="UF">
<EditItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("UF") %>'>
</asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("UF") %>'>
</asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Municipio" SortExpression="Municipio">
<EditItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Municipio") %>'></asp:Label>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("Municipio") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="People" SortExpression="People">
<ItemTemplate>
<asp:Label ID="LbPeople" runat="server" Text='<%# Bind("Cultura") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:HiddenField ID="Hidden1" Value='<%# Bind("Municipio") %>' runat="server"/>
<asp:HiddenField ID="Hidden2" Value='<%# Bind("UF") %>' runat="server"/>
<asp:SqlDataSource ID="SqlDataSourcePeopleEdit" runat="server"
ConnectionString="<%$ ConnectionStrings:dbdb %>"
ProviderName="<%$ ConnectionStrings:somar.ProviderName %>"
SelectCommand="SELECT People FROM Table_People WHERE (Cidade = @Municipio) AND (UF = @UF)"
CancelSelectOnNullParameter="false">
<SelectParameters>
<asp:ControlParameter ControlID="Hidden1" Name="Municipio" PropertyName="Value" Type="String" />
<asp:ControlParameter ControlID="Hidden2" Name="UF" PropertyName="Value" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
<asp:DropDownList ID="DdlPeople" runat="server" AutoPostBack="true"
DataSourceID="SqlDataSourcePeopleEdit" DataTextField="People"
DataValueField="People">
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
...stuff...
</asp:GridView>
东西
东西
你忘了说什么是不起作用的。例外?DDL最终是空的?到底是什么问题?很抱歉。Ddl没有值,如果我在SqlDataSource上设置属性CancelSelectOnNullParameter=“false”,它会显示“必须声明标量变量@xxx”,您正在声明带有3个字段(DataKeyNames=“id,市政,UF”
)的ControlParameter
仅提供2个带参数的字段(将id
作为其他必需参数省略)。尝试从DataKeyNames
属性中删除不必要的列字段名。您忘记了说明什么不起作用。异常?DDL最终为空?实际问题是什么?很抱歉。如果我设置属性CancelSelectOnNullParameter=“false”,DDL没有值在SqlDataSource上,它显示“必须声明标量变量@xxx”,您正在声明DataKeyNames
,其中包含3个字段(DataKeyNames=“id,市政,UF”
),而ControlParameter
仅提供2个带参数的字段(省略id
作为其他必需参数)。请尝试从DataKeyNames
property中删除不必要的列字段名。您好。写此问题时,我在另一家公司工作,无法再测试此解决方案。很抱歉,我明白了。希望如果其他人遇到类似问题,他们会确认这对他们有效。我遇到了类似问题,我发现这解决了我的问题,这就是为什么我决定在这里分享它。你好。我写这个问题的时候,我在另一家公司工作,我不能再测试这个解决方案了。对不起,我明白了。希望如果其他人遇到类似的问题,他们会确认这对他们有效。我有一个类似的问题,我发现解决了我的问题,这就是为什么我决定在这里分享它。