Pergunta

Tenho experiência em Rails e estou trabalhando em um projeto ASP.NET (não ASP MVC).Pergunta de novato:qual é a maneira mais fácil de criar um editor personalizado para uma tabela de registros?

Por exemplo:Eu tenho um monte de linhas de dados e quero alterar o campo "categoria" em cada uma - talvez um menu suspenso, talvez um link, talvez o usuário digite.

No Rails, eu iteraria nas linhas para construir uma tabela e teria um formulário para cada linha.O formulário teria uma caixa de entrada ou menu suspenso e enviaria os dados para um controlador como "/item/edit/15?category=foo" onde 15 era o itemID e a nova categoria era "foo".

Sou novo no modelo ASP.NET e não tenho certeza da maneira "certa" de fazer isso - apenas a maneira mais simples de recuperar os novos dados e salvá-los.Eu criaria um controle personalizado e o anexaria a cada linha?Qualquer ajuda será apreciada.

Foi útil?

Solução

Você REALMENTE pode trapacear hoje em dia e dar uma olhada nos novos Dados Dinâmicos que acompanham o .NET 3.5 SP1.Scott Guthrie tem uma entrada no blog demonstrando como isso será rápido e fácil para você aqui:

http://weblogs.asp.net/scottgu/archive/2007/12/14/new-asp-net-dynamic-data-support.aspx

Sem obter ESSE avanço, eu usaria o gerador XSD para gerar um DataSet fortemente tipado que coincidisse com a tabela em questão.Isso também gerará o TableAdapter que você pode usar para executar todas as suas instruções CRUD.

A partir daí, vincule-o a um DataGrid e aproveite todos os modelos/eventos padrão envolvidos com isso, como EditIndex, SelectedIndex, RowEditing, RowUpdated, etc.

Tenho feito isso desde os primeiros dias do .NET 1.0 e esse tipo de funcionalidade só fica cada vez mais simplificado a cada atualização do Framework.

EDITAR:Quero dar um rápido aceno ao blog de Matt Berseth também.Já faz algum tempo que acompanho muitas coisas dele e é ótimo!

Outras dicas

Existem alguns controles que farão isso para você, com níveis variados de complexidade dependendo de sua flexibilidade relativa.

A maneira tradicional de fazer isso seria o controle DataGrid, que fornece um layout de tabela.Se você quiser algo com mais flexibilidade na aparência, os controles DataList e ListView também possuem suporte integrado para edição, inserção ou exclusão de campos.

Confira Blog de Matt Berseth para obter alguns exemplos excelentes de controles asp.net em ação.

Obrigado pelas respostas pessoal.Parece que personalizar o DataGrid é o caminho a seguir.Para qualquer novato em ASP.NET, aqui está o que estou fazendo

<asp:DataGrid ID="GridView1" runat="server" AutoGenerateColumns="False">
    <Columns>
        <asp:BoundColumn DataField="RuleID" Visible="False" HeaderText="RuleID"></asp:BoundColumn>
        <asp:TemplateColumn HeaderText="Category">
        <ItemTemplate>
            <!-- in case we want to display an image -->
            <asp:Literal ID="litImage" runat="server">
            </asp:Literal>
            <asp:DropDownList ID="categoryListDropdown" runat="server"></asp:DropDownList>
         </ItemTemplate>
        </asp:TemplateColumn>

    </Columns>
</asp:DataGrid>

Isso cria uma grade de dados.Podemos então vinculá-lo a uma fonte de dados (DataTable no meu caso) e usar coisas como

foreach (DataGridItem item in this.GridView1.Items)
{
     DropDownList categoryListDropdown = ((DropDownList)item.FindControl("categoryListDropdown"));
     categoryListDropdown.Items.AddRange(listItems.ToArray());
}

para preencher o menu suspenso inicial na grade de dados.Você também pode acessar item.Cells[0].text para obter o RuleID neste caso.

Notas para mim:O modelo ASP.NET faz tudo no arquivo codebehind.Em um nível alto, você sempre pode iterar GridView1.Items para obter cada linha e item.findControl("ControlID") para consultar o valor armazenado em cada item, como após pressionar um botão "Atualizar".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top