Редактируемый Датагрид? Repeater? - PullRequest
0 голосов
/ 08 ноября 2008

У меня есть список элементов в заказе для отображения на asp.net - каждый элемент (строка) будет иметь 3 текстовых поля, чтобы пользователь мог как просматривать, так и изменять этот фрагмент данных (стоимость доставки, стоимость обработки, цена).

Каким был бы один «рекомендуемый» способ сделать это? С ретранслятором, я предполагаю, что тогда мне придется перебирать значения формы при обратной передаче, а с помощью элемента управления gridview мне придется переопределять onrowdatabound и Postback каким-то другим методом.

Я уверен, что оба будут работать, но что ВЫ, как разработчик, выбираете в этой ситуации?

1 Ответ

1 голос
/ 08 ноября 2008

В прошлом я использовал привязку к данным GridView TemplateColumns:

<asp:GridView runat="server" ID="grdRoster" AutoGenerateColumns="false">
    <Columns>
        <asp:TemplateField HeaderText="First Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtFirstName" Columns="10" Text='<%# Eval("RosterFirstName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Middle Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtMiddleName" Columns="10" Text='<%# Eval("RosterMiddleName") %>' />
            </ItemTemplate>
        </asp:TemplateField>                       
        <asp:TemplateField HeaderText="Last Name">
            <ItemTemplate>
                <asp:TextBox runat="server" ID="txtLastName" Columns="10" Text='<%# Eval("RosterLastName") %>' />
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

Затем, при обратной передаче (скажем, при нажатии кнопки «Сохранить»), вы можете перебрать строки в GridView и извлечь значения из текстовых полей:

foreach ( GridViewRow row in grdRoster.Rows )
{
    if ( row.RowType == DataControlRowType.DataRow )
    {
        string firstName = ( ( TextBox ) row.FindControl( "txtRosterFirstName" ) ).Text;
        string middleName = ( ( TextBox ) row.FindControl( "txtRosterMiddleName" ) ).Text;
        string lastName = ( ( TextBox ) row.FindControl( "txtRosterLastName" ) ).Text;
    }
}
...