Получить данные из источника данных sql в элементы управления asp.net - PullRequest
3 голосов
/ 31 августа 2009

У меня есть 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>   

Ответы [ 4 ]

3 голосов
/ 31 августа 2009

Вы должны рассмотреть возможность использования элемента управления 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>

См. Эти ссылки для получения дополнительной информации:

1 голос
/ 31 августа 2009

Мне нравится использовать это в коде:

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

конечно, не все детали здесь

1 голос
/ 31 августа 2009

Самый простой способ (который я бы подумал сделать это) - записать весь доступ к данным и заполнить форму в коде. Я немного смущен тем, что вы пометили это как C # и VB.net. В скором времени я обновлю этот пост кодом примера на C #; тем временем не стесняйтесь начинать комментировать спам с вопросами. :)

0 голосов
/ 07 февраля 2017

Я делаю это все время в 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-го столбца в элемент управления textbox.

Используя приведенный выше код или аналогичный, я получаю удар по многим птицам одним камнем, и мне не нужно управлять удалением элементов управления, хранящихся в памяти. Конечно, лучший способ сделать это - использовать оператор USING.

...