2009-08-31 19 views
3

私は非常に単純なselectステートメントを持つsqldatasourceを持っています。これは常に1つの行を返す必要があります。私は、データソースからそのデータを埋めたいページにテキストボックスを持っています。テキストボックスでこれをどうすればできますか?データベースにデータがない場合は、テキストボックスを空のままにします。どうすればこれを達成できますか?sqlデータソースから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> 

答えて

3

これを行うには、FormViewコントロールを使用することを検討する必要があります。バインディングコントロールを使用すると、すべてのコードをページのコードビハインドに詰め込もうとするよりはるかに簡単でクリーンです。私はまた、管理するC#/ VBコードのすべてを持っていないので、ページをはるかに簡単に保守することができると感じています。

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

詳細については、以下のリンクを参照してください。

+0

私はあなたがこれで行く場所が好きですが、私のテキストボックスは表示されません。私のコードを編集した...あなたは私が間違っているのを見ることができますか? – Eric

+0

scottを気にしないでください。私の問題は、デフォルトのモードが「編集」に設定されていることでした。それがなぜ私の問題なのか?私はそれをデフォルトにしたくないのですか? – Eric

+0

申し訳ありません - 私はそこには考えていませんでした - あなたはItemTemplateの代わりにEditItemTemplateを使いたいと思っていました。私は私のサンプルを更新します... –

1

最も簡単な方法は、すべてのデータアクセスとフォームの人口をコードビハインドに書き込むことです。私は少し混乱していますが、C#とVB.netの両方としてこれをタグ付けしました。私はこのポストをいくつかのC#サンプルコードで間もなく更新します。それまでの間はコメントでスパムを開始することができます。 :)

+0

私は両方の言語で読み書きできます。そして、C#でタグ付けされたときには、より多くの注意が払われます。 – Eric

+0

これは、データ・リーダーを手動で接続して使用することで、コードの中でこれをすべて行う方法を知っていますが、 – Eric

+0

ああ、大丈夫です!それではサンプルコードを気にしません。その場合、スコットの答えが行く方法です。 –

1

私は背後にあるコードでこれを使って好き:

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

もちろん、すべての詳細がここにはありません。

+0

これは私が私が探していたものだと思います。しかし、私はスコットの考えが好きです。それにもかかわらず+1 – Eric

0

これは、コントロール自体からデータをロードする「デフォルト」とは対照的に、C#ではこれを常に行っています。私のウェブページが読み込まれたら、私はASPではなくデータの負荷を制御することがわかります。下のメソッドは、たとえば、1つのテーブルから1つの行から1つのデータを取得するだけで、コネクタ、データセット、およびその他のコントロールの生成を避けることにも優れています。だから私の例では、私はにデータを配置するASP制御がTextBox制御である、txtCLOGと呼ばれる

   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(); 
         } 
        } 
       } 

。明らかに、データは3つのセルに沿ってデータセット内にあります。したがって、データソースが10列のデータを返す場合、私の例では、3列目のデータがテキストボックスコントロールに取り込まれます。

上記のコードを使用すると、1本の石で多くの鳥に当たってしまい、メモリに保持されているコントロールの処分も管理する必要はありません。もちろん、上記を実行するより良い方法は、USINGステートメントを使用することです。

関連する問題