2009-08-31 55 views
3

我有一個sqldatasource,它有一個非常簡單的select語句,應該總是返回一行。我在我想用數據源中的數據填充的頁面上有文本框。我怎麼能這樣做文本框?如果數據庫中沒有數據,那麼我希望文本框保持空白。我怎樣才能做到這一點?從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 2009-08-31 14:54:18

+0

沒關係斯科特。我的問題是默認模式被設置爲'編輯'。任何想法爲什麼這是我的問題?我不希望它成爲默認值嗎? – Eric 2009-08-31 14:56:52

+0

對不起 - 我沒有想到 - 你想使用EditItemTemplate而不是ItemTemplate。我會更新我的樣本... – 2009-08-31 15:10:41

1

最簡單的方法(即我認爲要做到這一點),是寫在代碼隱藏所有的數據訪問和形式的人口。不過,我有點困惑,你把它標記爲C#和VB.net。我將稍後用一些C#示例代碼更新這篇文章;在此期間隨時開始評論 - 垃圾問題。 :)

+0

我可以用這兩種語言讀寫。當用C#進行標記時,問題會受到更多的關注 – Eric 2009-08-31 14:31:06

+0

我知道如何在後面的代碼中通過手動連接和使用數據讀取器來完成所有這些操作,但是我希望沒有這樣做。 – Eric 2009-08-31 14:31:43

+0

啊,好的!然後我不會打擾示例代碼。在那種情況下,斯科特的答案就是要走的路。 – 2009-08-31 14:37:46

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 2009-08-31 14:58:09

0

我一直在C#中這樣做,而不是從控件本身的「默認」加載數據。這樣我就知道當我的網頁加載時,我控制數據加載,而不是ASP!下面我的方法也很好的避免了生成連接器,數據集和其他控件,例如從一個表中獲取一行數據。

   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(); 
         } 
        } 
       } 
在我的例子

因此,ASP控制我想要將數據放置到被稱爲txtCLOG,這是一個TextBox控制。顯然,數據在數據集3的單元格內。因此,如果您的數據源返回10列數據,那麼我的示例會將第三列的數據引入到文本框控件中。

使用上面的代碼或類似的命令,我可以用一塊石頭打出許多鳥,而且我也不必管理處理內存中的控件。當然,更好的方法是使用USING聲明。