繁体   English   中英

从sql数据源获取数据到asp.net控件

[英]Get data from sql datasource into asp.net controls

我有一个sqldatasource,它有一个非常简单的select语句,应该总是返回一行。 我在页面上有文本框,我想从数据源填充该数据。 我怎么能这样做文本框? 如果数据库中没有数据,那么我希望文本框保持为空。 我怎么能做到这一点?

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

您应该考虑使用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>

有关更多信息,请参阅以下链接

最简单的方法(我认为这样做)是在代码隐藏中编写所有数据访问和表单填充。 但是,我有点困惑,你把它标记为C#和VB.net。 我将很快用一些C#示例代码更新这篇文章; 在此期间,您可以随意开始发表评论垃圾邮件。 :)

我喜欢在后面的代码中使用它:

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

当然不是所有的细节都在这里

我一直在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列数据,那么我的示例会将第3列的数据引入文本框控件。

使用上面的代码或类似代码,我可以一举击中许多鸟类,而且我也不必管理处理内存中的控件。 当然,完成上述操作的更好方法是使用USING语句。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM