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

时间:2009-11-21 14:33:28

标签: asp.net gridview drop-down-menu

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

            <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>

2 个答案:

答案 0 :(得分:2)

您不需要控件绑定:

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

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

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

答案 1 :(得分:0)

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

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

runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>"

对于标记代码中的ASP.NET数据绑定,我不是最强的,但我很确定你的连接字符串需要指向 web.Config 文件中的实际字符串名称 ConnectionStrings 部分:

<connectionStrings>
    <clear />
    <add name="Mark1" connectionString="Data Source=localhost;Initial Catalog=Table1;Integrated Security=True;" providerName="System.Data.SqlClient" />
</connectionStrings>

但是,请使用您的实际连接字符串。

现在,您的标记应写为:

runat="server" ConnectionString="<%$ ConnectionStrings:Mark1 %>"

同样,我是新手。我发现这只是在试图找到解决自己问题的方法时。

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