2009-08-31 4 views
3

J'ai un sqldatasource avec une instruction select très simple qui devrait toujours retourner une ligne. J'ai des zones de texte sur une page que je veux remplir avec ces données de la source de données. comment pourrais-je faire cela pour les textboxes? S'il n'y a pas de données dans la base de données, je veux que les zones de texte restent vides. Comment puis-je accomplir cela?Récupère les données de la source de données sql dans les contrôles asp.net

<asp:Panel ID = "Panel2" runat="server" DefaultButton = "save" > 
         <fieldset style="width: 524px"><legend>Rouse InterChange Details</legend> 
         <asp:FormView runat="server" ID="MyFormView" DataSourceID="SqlDataSource3" DefaultMode="Edit"> 
         <ItemTemplate > 
         <table> 
          <tr> 
           <td align="right">Interchange ID:</td> 
           <td align="left"> 
            <asp:TextBox ID="txtIntID" runat="server" size="1" MaxLength = "2" Text='<%# Bind("Interchange_Id") %>'></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator8" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtIntID" runat="server" ErrorMessage="You Must Provide an Interchange ID."> </asp:RequiredFieldValidator> 
              <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender11" TargetControlID="RequiredFieldValidator8" HighlightCssClass="validatorCalloutHighlight" runat="server"> 
              </ajaxToolkit:ValidatorCalloutExtender> 
           </td> 
          </tr> 
          <tr> 
           <td align="right">Sender ID:</td> 
           <td align="left"> 
            <asp:TextBox ID="txtsender" runat="server" MaxLength = "15" ></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator9" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtsender" runat="server" ErrorMessage="You Must Provide a Sender ID."> </asp:RequiredFieldValidator> 
            <ajaxToolkit:ValidatorCalloutExtender ID="vce12" TargetControlID="RequiredFieldValidator9" HighlightCssClass="validatorCalloutHighlight" runat="server"> 
            </ajaxToolkit:ValidatorCalloutExtender> 
           </td> 
          </tr> 
          <tr> 
           <td align="right">Interchange Standard ID:</td> 
           <td align="left"> 
            <asp:TextBox ID="ISI" runat="server" size="1" MaxLength = "1" ></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator10" ValidationGroup = "rouse" Display ="None" ControlToValidate = "ISI" runat="server" ErrorMessage="You Must Provide an Interchange Standard ID."> </asp:RequiredFieldValidator> 
            <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender12" TargetControlID="RequiredFieldValidator10" HighlightCssClass="validatorCalloutHighlight" runat="server"> 
            </ajaxToolkit:ValidatorCalloutExtender> 
           </td> 
          </tr> 
          <tr> 
           <td align="right">Version:</td> 
           <td align="left"> 
            <asp:TextBox ID="Verstxt" runat="server" size="5" MaxLength = "5" ></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator11" ValidationGroup = "rouse" Display ="None" ControlToValidate = "Verstxt" runat="server" ErrorMessage="You Must Provide a Version."> </asp:RequiredFieldValidator> 
            <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender13" TargetControlID="RequiredFieldValidator11" HighlightCssClass="validatorCalloutHighlight" runat="server"> 
            </ajaxToolkit:ValidatorCalloutExtender> 
           </td> 
          </tr> 
          <tr> 
           <td align="right">Functional ID:</td> 
           <td align="left"> 
            <asp:TextBox ID="FuncID" runat="server" size="1" MaxLength = "2" ></asp:TextBox> 
            <asp:RequiredFieldValidator ID="RequiredFieldValidator12" ValidationGroup = "rouse" Display ="None" ControlToValidate = "FuncID" runat="server" ErrorMessage="You Must Provide a Functional ID."> </asp:RequiredFieldValidator> 
            <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender14" TargetControlID="RequiredFieldValidator12" HighlightCssClass="validatorCalloutHighlight" runat="server"> 
            </ajaxToolkit:ValidatorCalloutExtender> 
           </td> 
          </tr> 
          <tr style="display:none"> 
           <td align="right">Group Control #</td> 
           <td align="left"> 
            <asp:TextBox ID="txtGroupcontrol" runat="server" size="6" MaxLength = "9" ></asp:TextBox> 

           </td> 
          </tr> 
         </table> 
         </ItemTemplate> 
         </asp:FormView> 
         <asp:SqlDataSource ID="SqlDataSource3" runat="server" 
         ConnectionString="connectionstring" 
         SelectCommand="select * from table1 "></asp:SqlDataSource> 
         </fieldset></asp:Panel> 

Répondre

3

Vous devez envisager d'utiliser un contrôle FormView pour cela. L'utilisation des commandes de liaison est beaucoup plus facile et plus propre que d'essayer d'entasser tout votre code dans le code derrière la page. Je pense aussi que cela rend la page beaucoup plus facile à gérer, puisque vous n'avez pas tout le code C#/VB à gérer aussi.

<asp:FormView runat="server" ID="MyFormView" DataSourceID="MySqlDataSource" DefaultMode="Edit"> 
    <EditItemTemplate> 
     <table> 
      <tr> 
       <td align="right">Interchange ID:</td> 
       <td align="left"> 
        <asp:TextBox ID="txtIntID" runat="server" Text='<%# Bind("InterchangeID") %>' size="1" MaxLength = "2"></asp:TextBox> 
        <asp:RequiredFieldValidator ID="RequiredFieldValidator8" ValidationGroup = "rouse" Display ="None" ControlToValidate = "txtIntID" runat="server" ErrorMessage="You Must Provide an Interchange ID."></asp:RequiredFieldValidator> 
        <ajaxToolkit:ValidatorCalloutExtender ID="ValidatorCalloutExtender11" TargetControlID="RequiredFieldValidator8" HighlightCssClass="validatorCalloutHighlight" runat="server">            </ajaxToolkit:ValidatorCalloutExtender> 
       </td> 
      </tr> 

     <!-- rest of your table here --> 
     </table> 
    </EditItemTemplate> 
</asp:FormView> 
<asp:SqlDataSource runat="server" ID="MySqlDataSource" 
    SelectCommand="SELECT * FROM MyTable" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" > 
</asp:SqlDataSource> 

Voir ces liens pour plus d'informations:

+0

j'aime où vous allez avec ceci mais je ne vois plus ma zone de texte. J'ai édité mon code ... pouvez-vous voir ce que je fais mal? – Eric

+0

Fais attention à Scott. Mon problème était le mode par défaut étant réglé sur «Modifier». Une idée de pourquoi c'est mon problème? Ne veux-je pas que ce soit la valeur par défaut? – Eric

+0

Désolé - je ne pensais pas là - vous voudriez utiliser le EditItemTemplate au lieu de ItemTemplate. Je vais mettre à jour mon échantillon ... –

1

La meilleure façon (que je pense le faire) est d'écrire tous les accès aux données et la population de forme dans le code-behind. Je suis un peu confus, cependant, que vous avez étiqueté cela comme C# et VB.net. Je mettrai à jour ce post sous peu avec un exemple de code C#; En attendant, n'hésitez pas à commenter les spams avec des questions. :)

+0

Je peux lire et écrire dans les deux langues. Et une question obtient beaucoup plus d'attention lorsqu'il est marqué avec C# – Eric

+0

Je sais comment faire tout cela dans le code derrière en connectant manuellement et en utilisant un lecteur de données, mais je voudrais le faire sans cela. – Eric

+0

Ah, d'accord! Ensuite, je ne vais pas déranger avec l'exemple de code. Dans ce cas, la réponse de Scott est la voie à suivre. –

1

J'aime utiliser ceci dans le code sous-jacent:

GridView1.DataSource = getQuery(ConnectionString, "select * from mytable"); 
GridView1.DataBind(); 

private DataTable getQuery(string ConnStr, string query) 
    { 
     DataTable dt = new DataTable(); 

     try 
     { 
      using (SqlConnection conn = new SqlConnection(ConnStr)) 
      using (SqlDataAdapter cmd = new SqlDataAdapter(query, conn)) 


       cmd.Fill(dt); 
     } 
     catch { } 
     return dt; 
    } 

bien sûr, tous les détails ne sont pas ici

+0

ce que je crois est ce que je cherchais. Mais j'aime l'idée de Scott. Néanmoins +1 – Eric

0

Je fais cela tout le temps en C# par opposition aux données de chargement "par défaut" des contrôles eux-mêmes. De cette façon, je sais que lorsque ma page Web se charge, je contrôle la charge de données, pas ASP! Ma méthode ci-dessous est également très utile pour éviter de générer des connecteurs, des jeux de données et d'autres contrôles simplement pour obtenir une donnée d'une rangée, d'une table par exemple.

   SqlDataSource sdsClogdetails = (SqlDataSource)gvRow.FindControl("sdsCLdetails"); 
       if (sdsClogdetails != null) 
       { 
        DataView dv = sdsClogdetails.Select(DataSourceSelectArguments.Empty) as DataView; 
        if (dv != null) 
        { 
         DataTable dt = dv.ToTable() as DataTable; 
         if (dt != null) 
         { 
          DataRow dr = (DataRow)dt.Rows[0]; 
          txtCLOG.Text = dr.ItemArray[3].ToString(); 
         } 
        } 
       } 

Ainsi, dans mon exemple, le contrôle ASP Je veux placer des données dans txtCLOG est appelé, qui est un contrôle TextBox. Évidemment, les données sont à l'intérieur de l'ensemble de données 3 cellules. Donc, si votre datasource renvoie 10 colonnes de données, alors mon exemple amènerait les données de la 3ème colonne dans le contrôle textbox. En utilisant le code ci-dessus, ou similaire, je peux frapper plusieurs oiseaux d'une pierre et je n'ai pas besoin de gérer l'élimination des commandes gardées en mémoire non plus. Bien sûr, une meilleure façon d'avoir fait ce qui précède est d'utiliser l'instruction USING.