传递下拉值以更新ASP.Net Gridview的参数

传递下拉值以更新ASP.Net Gridview的参数,asp.net,gridview,drop-down-menu,Asp.net,Gridview,Drop Down Menu,我有一个gridview,在编辑模式下,我使用下拉菜单加载所有省份,但是,当我更改省份并单击更新时,我的页面崩溃…我没有正确地将省参数发送到gridview的updateparameters…这是我的代码,请有人帮助 <asp:GridView runat="server" ID="gvUsers" DataKeyNames="UserID" BackColor="#eeeeee" Width="85%" Horizontal

我有一个gridview,在编辑模式下,我使用下拉菜单加载所有省份,但是,当我更改省份并单击更新时,我的页面崩溃…我没有正确地将省参数发送到gridview的updateparameters…这是我的代码,请有人帮助

            <asp:GridView runat="server" ID="gvUsers" DataKeyNames="UserID" BackColor="#eeeeee" Width="85%"
                    HorizontalAlign="Center"
                    Font-Bold="False" Font-Names="Verdana"
                    Font-Size="10pt" AutoGenerateColumns="False"
                    OnRowDataBound="gvUsers_RowDataBound" 
                    OnRowDeleting="gvUsers_RowDeleting" >
            <HeaderStyle BackColor="#904601" ForeColor="White" 
                   Font-Bold="True" HorizontalAlign="Left" />
            <SelectedRowStyle BackColor="Yellow" />
            <AlternatingRowStyle BackColor="White" Font-Bold="false" />
                   <Columns>
                         <asp:TemplateField>
                       <ItemTemplate>
                           <asp:LinkButton ID="LinkButton2" 
                             CommandArgument='<%# Eval("UserID") %>' 
                             CommandName="Select" runat="server">
                             Select</asp:LinkButton>
                         </ItemTemplate>     
                         </asp:TemplateField>
                        <asp:BoundField DataField="UserID" Visible="False" />
                        <asp:TemplateField HeaderText="Name">
                            <ItemTemplate>
                                <asp:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
                                <asp:Label ID="Label2" runat="server" Text='<%# Eval("LastName") %>'></asp:Label>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField HeaderText="Delete?">
                         <ItemTemplate>
                           <asp:LinkButton ID="LinkButton1" 
                             CommandArgument='<%# Eval("UserID") %>' 
                             CommandName="Delete" runat="server">
                             Delete</asp:LinkButton>
                         </ItemTemplate>
                       </asp:TemplateField>
                    </Columns> 
                <RowStyle HorizontalAlign="Left" />
              </asp:GridView><br /><br />
              <asp:DetailsView runat="server" ID="dvUser" DataSourceID="SqlDataSource1" AutoGenerateRows="False" Width="85%" DataKeyNames="UserID"
                    HorizontalAlign="Center" AutoGenerateInsertButton="True" AutoGenerateEditButton="True" OnItemInserted="dvUsers_ItemInserted" >
                  <Fields>
                      <asp:BoundField DataField="UserID" Visible="False" />
                      <asp:BoundField DataField="FirstName" HeaderText="FirstName" SortExpression="FirstName" />
                      <asp:BoundField DataField="LastName" HeaderText="LastName" SortExpression="LastName" />
                      <asp:BoundField DataField="UserName" HeaderText="UserName" ReadOnly="true" SortExpression="UserName" />
                      <asp:TemplateField HeaderText="Password">
                        <ItemTemplate>
                            <asp:Label runat="server" ID="lblPassword" Text="●●●●●●●●●"></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:TextBox runat="server" ID="txtPassword" TextMode="Password" Text='<%# Bind("Password") %>'>
                            </asp:TextBox>
                        </EditItemTemplate>
                      </asp:TemplateField>
                      <asp:TemplateField HeaderText="Birthdate" SortExpression="Birthdate">
                        <EditItemTemplate>
                            <asp:TextBox runat="server" ID="Birthdate" Text='<%# Bind("Birthdate") %>' ></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label runat="Server" ID="lblBirthdate" Text='<%# Bind("Birthdate") %>'></asp:Label>
                        </ItemTemplate>
                      </asp:TemplateField>
                      <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
                      <asp:BoundField DataField="Apt" HeaderText="Apt" SortExpression="Apt" />
                      <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
                      <asp:TemplateField HeaderText="Province">
                        <ItemTemplate>
                            <asp:Label runat="server" ID="lblProvince" Text='<%# Eval("ProvName") %>'></asp:Label>
                        </ItemTemplate>
                        <EditItemTemplate>
                            <asp:DropDownList runat="server" ID="ddlProvince" DataValueField="ProvinceID" DataSourceID="SqlDataSource2" DataTextField="Province"></asp:DropDownList>
                        </EditItemTemplate>
                      </asp:TemplateField>
                      <asp:BoundField DataField="PostalCode" HeaderText="PostalCode" SortExpression="PostalCode" />
                      <asp:BoundField DataField="PhoneNum" HeaderText="PhoneNum" SortExpression="PhoneNum" />
                      <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" />
                      <asp:CheckBoxField DataField="ynAdminUser" HeaderText="ynAdminUser" SortExpression="ynAdminUser" />
                  </Fields>
            </asp:DetailsView>
            <asp:SqlDataSource ID="SqlDataSource2" 
                    runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
                    SelectCommand="SELECT ProvinceID, Province FROM tblProvince"></asp:SqlDataSource>
                    <asp:SqlDataSource ID="SqlDataSource1" 
                    runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
                    SelectCommand="SELECT a.UserID, a.FirstName, a.LastName, a.UserName, a.Password, a.Birthdate, a.Address, a.Apt, a.City, a.Province, b.Province as 'ProvName',
                                    a.PostalCode, a.PhoneNum, a.Email, a.ynAdminUser
                                    FROM tblUser a
                                    INNER JOIN tblProvince B ON A.Province = B.ProvinceID
                                    WHERE (a.UserID = @UserID) AND (a.ynDelete = 0)"
                    InsertCommand="INSERT INTO tblUser(FirstName, LastName, UserName, Password, Birthdate, Address, Apt, City, Province, PostalCode, Email, PhoneNum, ynAdminUser, ynDelete) VALUES (@FirstName, @LastName, @UserName, @Password, @Birthdate, @Address, @Apt, @City, @Province, @PostalCode, @Email, @PhoneNum, @ynAdminUser, 0)"
                    UpdateCommand="UPDATE tblUser SET FirstName = @FirstName, LastName = @LastName, Birthdate = @Birthdate, Address = @Address, Apt = @Apt, City = @City, Province = @Province, PostalCode = @PostalCode, PhoneNum = @PhoneNum, Email = @Email, ynAdminUser = @ynAdminUser WHERE (UserID = @UserID)">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="gvUsers" Name="UserID" PropertyName="SelectedValue" Type="Int32" />
                    </SelectParameters>
                    <UpdateParameters>
                        <asp:Parameter Name="FirstName" Type="String" />
                        <asp:Parameter Name="LastName" Type="String" />
                        <asp:Parameter DbType="DateTime" Name="BirthDate" />
                        <asp:Parameter Name="Address" Type="String" />
                        <asp:Parameter Name="Apt" Type="String" />
                        <asp:Parameter Name="City" Type="String" />
                        <asp:ControlParameter Name="Province" ControlID="ddlProvince" PropertyName="SelectedValue" Type="Int32" />
                        <asp:Parameter Name="PhoneNum" Type="String" />
                        <asp:Parameter Name="Email" Type="String" />
                        <asp:Parameter Name="ynAdminUser" Type="Boolean" />
                        <asp:Parameter Name="UserID" Type="Int32" />
                    </UpdateParameters>
                    <InsertParameters>
                        <asp:Parameter Name="FirstName" Type="String" />
                        <asp:Parameter Name="LastName" Type="String" />
                        <asp:Parameter Name="UserName" Type="String" />
                        <asp:Parameter Name="Password" Type="String" />
                        <asp:Parameter DbType="DateTime" Name="Birthdate" />
                        <asp:Parameter Name="Address" Type="String" />
                        <asp:Parameter Name="Apt" Type="String" />
                        <asp:Parameter Name="City" Type="String" />
                        <asp:Parameter Name="Province" Type="Int32" />
                        <asp:Parameter Name="PostalCode" Type="String" />
                        <asp:Parameter Name="Email" Type="String" />
                        <asp:Parameter Name="PhoneNum" Type="String" />
                        <asp:Parameter Name="ynAdminUser" Type="Boolean" />
                    </InsertParameters>
                </asp:SqlDataSource>

挑选
删除



您不需要控件绑定:

<asp:ControlParameter Name="Province" ControlID="ddlProvince" PropertyName="SelectedValue" Type="Int32" />

相反,请像其他参数一样使用regualar参数,并将以下绑定添加到gridview编辑模式的下拉列表中:

SelectedValue=<%#Bind("Province")%>
SelectedValue=

我意识到这是一个非常古老的问题,我希望你能找到答案

但是,看看您的标记,我想说您的连接字符串从未填写过:

runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
runat=“server”ConnectionString=“”
对于标记代码中的ASP.NET数据绑定,我不是最强的,但我非常确定您的连接字符串需要指向web.Config文件的ConnectionString部分中的实际字符串名称:


不过,请使用实际的连接字符串

现在,您的标记应该写为:

runat="server" ConnectionString="<%$ ConnectionStrings:Mark1 %>"
runat=“server”ConnectionString=“”
再说一次,我是新手。我是在试图寻找解决自己问题的方法时才发现这一点的


如果这是错误的(可能),有人会告诉我我做错了什么,我会删除它。

下拉控件中没有SelecedValue选项……当我尝试此操作时(没有添加SelectedValue),它试图将NULL传递给provincewow的参数时崩溃了,我的错误!虽然它没有出现在intellisense弹出窗口中,但我尝试了一下,效果很好……谢谢,那么多了,省实际上被选中了?如果没有,请尝试将ConvertEmptyStringToNull=“false”添加到参数中。SelectedValue是从下拉列表中双向绑定数据的方式。如果您说“我的页面崩溃”,您能提供更多详细信息吗?是否引发异常?它之所以引发异常,是因为它试图将NULL作为省参数传递…这表明ddlProvince.SelectedValue未按预期传递。简单地说,我想在gridview更新中将下拉列表的selectedvalue作为省更新参数传递
runat="server" ConnectionString="<%$ ConnectionStrings:Mark1 %>"