none
Gerar matriz como planilha em tempo de execução RRS feed

  • Pergunta

  • Caros,

    Estou tentando desenvolver uma espécie de planilha em c#, onde carrego os dados q serão o título da planilha, e depois carrego outros dados que carregarão uma coluna lateral.

    Será mais ou menos assim:

                 texto1    texto2     text3      texto4    texto5     <- titulos, vêm do banco

    nome1  [         ]  [         ]    [         ]   [         ]   [         ]    <- nomes, vê do banco

    nome2  [         ]  [         ]    [         ]   [         ]   [         ]

    nome3  [         ]  [         ]    [         ]   [         ]   [         ]

    os espaços em branco serão textbox gerados automaticamente para preenchimento.

    O meu problema é, como desenvolver isso?? tentei com repeater, mas não rolou. Alguém tem alguma idéia de como posso fazer essa página?

    Desde já agradeço a atenção.

    sexta-feira, 18 de maio de 2012 13:13

Respostas

Todas as Respostas

  • Sugestao:  Faça um sql no banco que retorne as colunas pelo titulo e o nome das linhas; mais ou menos assim:

    SELECT NOMARQ, ' ' AS COLUNA1, '' AS COLUNA2, '' AS COLUNA3 FROM TABARQ

    voce pode então utilizar um grid que terá Label na coluna 1, e textbox nas demais colunas.

    <asp:Panel ID="pnlGrid" runat="server" Width="98%" ScrollBars="Vertical" Height="100%"
         Style="border-bottom: solid 1px DarkGrey; border-left: solid 1px DarkGrey; overflow-x: hidden;" 
    	ondatabinding="pnlGrid_DataBinding">
    	<asp:GridView ID="grvClasseIndicator" runat="server" Width="100%" AllowPaging="False"
    		OnRowDataBound="grvClasseIndicator_RowDataBound" EmptyDataText="Pesquisa n&#227;o encontrada!"
    		DataKeyNames="NOMARQ" ShowHeader="False" AutoGenerateColumns="False"
    		CssClass="GridInPanel" ondatabound="grvClasseIndicator_DataBound">
    		<PagerSettings Position="Bottom" Mode="Numeric"></PagerSettings>
    		<HeaderStyle CssClass="header_tabela2" />
    		<Columns>
    			<asp:BoundField DataField="NOMARQ" Visible="false" HeaderText="NOME ARQ">
    				<ItemStyle Width="0%" HorizontalAlign="center"></ItemStyle>
    				<HeaderStyle HorizontalAlign="Center"></HeaderStyle>
    			</asp:BoundField>
    			<asp:TemplateField HeaderText="COLUNA1" Visible="true">
    				<ItemStyle Width="8%" HorizontalAlign="Center" />
    				<ItemTemplate>
    					<asp:TextBox ID="txtCOLUNA1" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"COLUNA1") %>'></asp:TextBox>
    				</ItemTemplate>
    				<HeaderStyle HorizontalAlign="Center" />
    			</asp:TemplateField>
    			<asp:TemplateField HeaderText="COLUNA2" Visible="true">
    				<ItemStyle Width="8%" HorizontalAlign="Center" />
    				<ItemTemplate>
    					<asp:TextBox ID="txtCOLUNA2" runat="server" Text='<%# DataBinder.Eval(Container.DataItem,"COLUNA2") %>'></asp:TextBox>
    				</ItemTemplate>
    				<HeaderStyle HorizontalAlign="Center" />
    			</asp:TemplateField>
    			
    			... colocar os demais textbox...
    			
    		</Columns>
    		<RowStyle CssClass="entradadado1" />
    		<AlternatingRowStyle CssClass="entradadado2" />
    	</asp:GridView>
    </asp:Panel>

    Você busca do banco de dados e fiz o databind() do grid.

    A voce pode fazer o que deseja, via javascript, por exemplo, colocar formatação no textbox pra digitar valor e etc.

    Espero que te ajude...

    sexta-feira, 18 de maio de 2012 16:32
  • Olá José,

    obrigado pelo seu retorno, mas essa solução não funciona pra mim. A qtde de títulos é variável, podem vir 2 ou 10, por exemplo. Eu preciso primeiro gerar uma linha com os titulos, a partir da coluna 2 e após isso, gerar os nomes na coluna 1, como coloquei no desenho.

    sexta-feira, 18 de maio de 2012 16:51
  • meu resultado final tem q ser assim, isso lembrando q a quantidade de títulos e nomes pode ser variável:

    <table>
                <tr>
                    <td></td>
                    <td>teste 1</td>
                    <td>teste 2</td>
                    <td>teste 3</td>
                    <td>teste 4</td>
                </tr>
                <tr>
                    <td>nome 1</td>
                    <td><asp:TextBox ID="t_1" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox3" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>nome 2</td>
                    <td><asp:TextBox ID="TextBox4" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox5" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox6" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox7" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>nome 3</td>
                    <td><asp:TextBox ID="TextBox8" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox9" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox10" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox11" runat="server"></asp:TextBox></td>
                </tr>
                <tr>
                    <td>nome 3</td>
                    <td><asp:TextBox ID="TextBox12" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox13" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox14" runat="server"></asp:TextBox></td>
                    <td><asp:TextBox ID="TextBox15" runat="server"></asp:TextBox></td>
                </tr>
            </table>


    sexta-feira, 18 de maio de 2012 17:28
  • Leandro,

    Você deve utilizar o controle TABLE do Toolkit. Não é o HTMLControl, e sim o Table, que fica acima do TextBox. A construção de matriz programaticamente é feita com 2 estruturas de repetição. Uma para as <tr> e outra para as <td>. As Tags <table> deverão ser fixas.

    É natural que você deva precisar de um recordset somente para recuperas os dados das linhas e outro, dentro do for de cada linha, para recuperar as colunas.



     


    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto

    sexta-feira, 18 de maio de 2012 17:56
  • Olá Rafael,

    estou tentando fazer dessa maneira, mas o Table não tem a opção datasource e não aceita um datatable. Pesquisei em alguns lugares, e parece que não existe a opção datasource mesmo..como eu faria para preencher esses Tables?

    Vlw!!

    sexta-feira, 18 de maio de 2012 18:35
  • Caros, consegui resolver com esse link http://stackoverflow.com/questions/4476174/asp-net-and-c-sharp-fill-a-table-with-data-from-database. obrigado pelas respostas!!..
    • Marcado como Resposta leandro.perdizo sexta-feira, 18 de maio de 2012 19:29
    sexta-feira, 18 de maio de 2012 19:16
  • Então, como eu disse, o ideal é usar duas estruturas de repetição (For, While, Foreach), e não vincular um DataSource diretamente a Table.

    Rafael Santos
    E-mail: rsdsantos@gmail.com

    Pequeno Gafanhoto


    • Editado Rafa Santos sexta-feira, 18 de maio de 2012 19:30
    sexta-feira, 18 de maio de 2012 19:30