2009-11-21 6 views
2

J'ai un gridview qui, quand en mode d'édition, j'utilise une liste déroulante pour charger toutes les provinces, cependant, quand je change la province et clique sur update, ma page plante. .Je ne pas envoyer le paramètre de la province aux UpdateParameters correctement ... voici mon code du gridview, quelqu'un s'il vous plaît aider ..passer la valeur déroulante pour mettre à jour le paramètre pour ASP.Net 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> 
+0

Vous dites 'Ma page se bloque', pouvez-vous donner plus de détails? Y a-t-il une exception qui est lancée? – Phaedrus

+0

il lance une exception car il essaye de passer NULL comme paramètre de province ... ce qui indique que ddlProvince.SelectedValue n'est pas passé comme je le souhaitais. Tout simplement, je veux passer la valeur sélectionnée de la liste déroulante comme le paramètre de mise à jour province dans la mise à jour gridview – Mark

Répondre

2

Vous n'avez pas besoin du contrôle de liaison:

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

lieu , utilisez un paramètre regualar comme les autres et ajoutez la liaison suivante à votre liste déroulante pour Le mode d'édition du gridview:

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

Il n'y a pas d'option SelecedValue dans le contrôle déroulant ... quand j'ai essayé ceci (sans ajouter SelectedValue), passer NULL au paramètre pour la province – Mark

+0

wow, mon erreur! bien qu'il n'apparaisse pas dans le popup intelisense, je l'ai essayé et ça a marché ... merci beaucoup – Mark

+0

Est-ce qu'une province a été sélectionnée? Si ce n'est pas le cas, essayez d'ajouter ConvertEmptyStringToNull = "false" à votre paramètre. SelectedValue est la façon dont vous liez les données à deux dans une liste déroulante. – ScottE

0

Je réalise que c'est une question vraiment ancienne, et j'espère que vous avez trouvé votre réponse.

En regardant votre balisage, cependant, je veux dire vos chaînes de connexion ont jamais été remplis:

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

Je ne suis pas le plus fort en matière de ASP.NET databinding dans le code de balisage, mais je suis assez sûr que votre chaîne de connexion doit pointer vers un nom de chaîne réelle dans votre web.config ConnectionStrings section fichier:

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

Utilisez quel que soit votre un chaîne de connexion ctual est, cependant.

Maintenant, votre balisage devrait être écrit:

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

Encore une fois, je suis nouveau à cela. Je l'ai trouvé seulement en essayant de chercher des moyens de résoudre mes propres problèmes.

Si cela est faux (possible), quelqu'un vient me faire savoir ce que j'ai fait de mal et je vais le supprimer.

Questions connexes