Путь разработчика

Сборник полезных примеров и советов для .NET программистов

Табличный вывод данных. Продолжение.

2010-06-08 от Kosten

В предыдущей статье мы рассмотрели создание шаблона таблицы и наполнение его данными. Сегодня мы рассмотрим возможность редактирования данных в таблице. Для этого нам понадобится исходный код примера из предыдущей статьи. Обратите внимание, что в нашей таблице есть колонка “Действия”, в которой находится пока одно действие - редактировать. При нажатии на эту ссылку соответствующая запись переходит в режим редактирования. С помощтю шаблонов мы можем управлять этим процессом. Добавьте в нашу таблицу ListView следующий раздел:

 
 <EditItemTemplate>
                <tr>
                    <td>
                        <asp:TextBox ID="txtSurname" runat="server" Text='<%#Bind("Surname")%>' Width="170px"></asp:TextBox>
                        <br />
                        <asp:TextBox ID="txtName" runat="server" Text='<%#Bind("Name")%>' Width="170px"></asp:TextBox>
                        <br />
                        <asp:TextBox ID="txtPatronymic" runat="server" Text='<%#Bind("Patronymic")%>' Width="170px"></asp:TextBox>
                        <asp:HiddenField ID="hfSurname" runat="server" Value='<%#Bind("Surname")%>' />
                        <asp:HiddenField ID="hfName" runat="server" Value='<%#Bind("Name")%>' />
                        <asp:HiddenField ID="hfPatr" runat="server" Value='<%#Bind("Patronymic")%>' />
                    </td>
                    <td>
                        <asp:TextBox ID="txtAddr" runat="server" Text='<%#Bind("Addr")%>' Width="170px"></asp:TextBox>
                    </td>
                    <td>
                        <asp:TextBox ID="txtPhone" runat="server" Text='<%#Bind("Phone")%>' Width="100px"></asp:TextBox>
                    </td>
                    <td>
                        <asp:TextBox ID="txtBirthDate" runat="server" Text='<%#Bind("BirthDate")%>' Width="170px"></asp:TextBox>
                        <ajaxToolkit:CalendarExtender ID="exCal" runat="server" TargetControlID="txtBirthDate">
                        </ajaxToolkit:CalendarExtender>
                    </td>
                    <td>
                        <asp:DropDownList ID="ddlGender" runat="server" Width="50px">
                            <asp:ListItem Text="муж." Value="M"></asp:ListItem>
                            <asp:ListItem Text="жен." Value="W"></asp:ListItem>
                        </asp:DropDownList>
                    </td>
                    <td>
                        <asp:TextBox ID="txtDescription" runat="server" Text='<%#Bind("Description")%>' Width="170px"></asp:TextBox>
                    </td>
                    <td>
                        <asp:LinkButton ID="lbSave" runat="server" OnCommand="lbSave_Command" CausesValidation="false">Сохранить</asp:LinkButton><br />
                        <asp:LinkButton ID="lbDelete" runat="server" OnCommand="lbDelete_Command" CausesValidation="false">Удалить</asp:LinkButton><br />
                        <asp:LinkButton ID="lbCancel" OnCommand="lbCancel_Command" runat="server" CausesValidation="false">Отмена</asp:LinkButton>
                    </td>
                </tr>
            </EditItemTemplate>

Этот шаблон описывает запись в таблице для редактирования. А именно какие элементы подлежат редактированию и с помощью каких контролов. Обратите внимание на столбец “Действия” - там появились команды “Сохранить”, “Удалить” и “Отмена”. Давайте рассмотрим их реализацию в коде.
Отмена редактирования:

    protected void lbCancel_Command(object sender, CommandEventArgs e)
    {
        lvDataView.EditIndex = -1;
        lvDataView.DataBind();
    }

Сохранить изменения:

    protected void lbSave_Command(object sender, CommandEventArgs e)
    {
        string strName, strSurname, strPatron, strAddr, strPhone, strGender, strDesc;
        string strTemp;
 
        ListViewItem lvi = ((ListViewItem)((LinkButton)sender).NamingContainer);
        strName = ((TextBox)lvi.FindControl("txtName")).Text.Trim();
        strSurname = ((TextBox)lvi.FindControl("txtSurname")).Text.Trim();
        strPatron = ((TextBox)lvi.FindControl("txtPatronymic")).Text.Trim();
 
        strAddr = ((TextBox)lvi.FindControl("txtAddr")).Text.Trim();
        strPhone = ((TextBox)lvi.FindControl("txtPhone")).Text.Trim();
        strDesc = ((TextBox)lvi.FindControl("txtDescription")).Text.Trim();
        strGender = ((DropDownList)lvi.FindControl("ddlGender")).SelectedValue;
 
        strTemp = ((TextBox)lvi.FindControl("txtBirthDate")).Text.Trim();
        DateTime dtBirthDate = Convert.ToDateTime(strTemp);
 
        DateTime dtNow = DateTime.Now;
 
        string strNameORG, strSurnameORG, strPatronORG;
        strNameORG = ((HiddenField)lvi.FindControl("hfName")).Value.Trim();
        strSurnameORG = ((HiddenField)lvi.FindControl("hfSurname")).Value.Trim();
        strPatronORG = ((HiddenField)lvi.FindControl("hfPatr")).Value.Trim();
 
        //тут сохраняем в базе 
 
        lvDataView.EditIndex = -1;
        lvDataView.DataBind();
    }

Удаление записи:

    protected void lbDelete_Command(object sender, CommandEventArgs e)
    {
        ListViewItem lvi = ((ListViewItem)((LinkButton)sender).NamingContainer);
 
        string strNameORG, strSurnameORG, strPatronORG;
        strNameORG = ((HiddenField)lvi.FindControl("hfName")).Value.Trim();
        strSurnameORG = ((HiddenField)lvi.FindControl("hfSurname")).Value.Trim();
        strPatronORG = ((HiddenField)lvi.FindControl("hfPatr")).Value.Trim();
 
        //удаляем запись из базы
 
        lvDataView.EditIndex = -1;
        lvDataView.DataBind();

Этот код можно легко адаптировать под различные варианты использования с минимальными затратами.

Удачного Вам программирования. Жду Ваших отзывов, комментариев, вопросов.

Опубликовано Вторник, 08-06-2010 в 3:35 пп в рубрики ASP.NET, C#, Без рубрики. Вы можете оставить отслеживать комментарии к записи при помощи RSS 2.0 ленты. Вы можете оставить комментарий, или трекбек с Вашего сайта.

Оставить комментарий