Fórum Criar grade com Lista ou DataSet #14523

25/01/2010

0

Bom dia...      Estou precisando criar uma GRADE parecido com nossa grid, só que num arquivo DOC (Word), através dos dados de um DataSet ou List<Classe> (Generic). com isso estará criando um arquivo word com uma grade com estes dados.   Aguardo contato, Vinicius Climaco.
Vinicius Climaco

Vinicius Climaco

Responder

Posts

25/01/2010

Vinicius Climaco

Estou querendo usar a classe Microsoft.Office.Interop.Word
Responder

Gostei + 0

26/01/2010

Fabio Mans

Olá desculpa responder somente hoje, ontem foi feriado em São Paulo.   Você não pode exibir um grid e quando o usuário quiser exportar este grid ele clica em um botão e é gerado um arquivo Word?   Pode ser assim?   Fabio
Responder

Gostei + 0

26/01/2010

Vinicius Climaco

Não, no caso é uma List Generica ou DataSet mesmo... não é um grid. Inclusive a solução de grid eu vi num artigo acho que do Macoratti, mas não serve, tem que ser DataSet ou List<>. 
Responder

Gostei + 0

26/01/2010

Fabio Mans

Vinicios é bem parecido com o exemplo do Grid, abaixo eu mostro um exemplo, a diferença com o Grid é que você pode formatar.   Veja se ajuda.     protected void Button1_Click(object sender, EventArgs e) { DataSet ds = new DataSet(); DataTable dt = new DataTable("Table"); dt.Columns.Add("Name", Type.GetType("System.String")); dt.Columns.Add("Address", Type.GetType("System.String")); dt.Columns.Add("Phone", Type.GetType("System.String")); DataRow dr = dt.NewRow(); dr["Name"] = "Sandeep Aparajit"; dr["Address"] = "Redmond USA"; dr["Phone"] = "425-000-0000"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["Name"] = "Anthony Gill"; dr["Address"] = "Ohio USA"; dr["Phone"] = "625-000-0000"; dt.Rows.Add(dr); ds.Tables.Add(dt); StringBuilder sbContent = new StringBuilder(); for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i++) { for (int j = 0; j <= ds.Tables[0].Columns.Count - 1; j++) { sbContent.Append(" " + ds.Tables[0].Rows[i][j].ToString() + " "); } sbContent.Append("\n"); } Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=FileName.doc"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/msword"; Response.Write(sbContent.ToString()); Response.End(); }
Responder

Gostei + 0

26/01/2010

Vinicius Climaco

Estamos quase lá... rs... mas e quanto ao List<>, terei de gerar em List<> tbm... como ficaria  ?
Responder

Gostei + 0

26/01/2010

Fabio Mans

O problema na lista é que eu não tenho a coluna, o que faço converto minha lista para datable e faço igual ao exemplo anterior.   Veja se ajuda.     protected void Button2_Click(object sender, EventArgs e) { List<Customer> customers = new List<Customer> { new Customer() { Id = 123, GivenName = "Steve", Surname = "Jobs", EmailAddress = "steve@apple.com", NickName = "Steve" }, new Customer() { Id = 789, GivenName = "Bill", Surname = "Gates", EmailAddress = "bgates@microsoft.com", NickName = "Bill" } }; DataTable dataTable = ConverteListParaDataTable(customers); StringBuilder sbContent = new StringBuilder(); for (int i = 0; i <= dataTable.Rows.Count - 1; i++) { for (int j = 0; j <= dataTable.Columns.Count - 1; j++) { sbContent.Append(" " + dataTable.Rows[i][j].ToString() + " "); } sbContent.Append("\n"); } Response.Clear(); Response.AddHeader("content-disposition", "attachment;filename=FileName.doc"); Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = "application/msword"; Response.Write(sbContent.ToString()); Response.End(); } public static DataTable ConverteListParaDataTable<T>(List<T> list) { DataTable dt = new DataTable(); foreach (PropertyInfo info in typeof(T).GetProperties()) { dt.Columns.Add(new DataColumn(info.Name, info.PropertyType)); } foreach (T t in list) { DataRow row = dt.NewRow(); foreach (PropertyInfo info in typeof(T).GetProperties()) { row[info.Name] = info.GetValue(t, null); } dt.Rows.Add(row); } return dt; }
Responder

Gostei + 0

26/01/2010

Vinicius Climaco

Assim esta quase certo, mas seguinte... eu preciso usar o Microsoft.Office.Interop.Word para geração do arquivo de Word, no caso não vou ficar fazendo download, minha aplicação é WinForm, mas independente disso quero gerar arquivos em massa, tipo ele vai gerando e salvando o arquivo entende ? Além disso gostaria de usar template, um arquivo Word já pré formatado e apenas substituir palavras, o problema esta em gerar as grades, pois não queria ficar apenas nas grades verticais (estilo excel), mas também nas horizontais (estilo formulário) repetindo conforme o numero de registros por exemplo, terei uma classe Customer e relacionada a ele tenho um atributo do tipo List<Item> com uma lista de Item´s e eu geraria mais ou menos assim:     Sr. [Fulano],      Comprou em nossa loja o equivalente a [valor_total] e [quantidade] de produtos.    Segue abaixo a lista de produtos:      Item: Bola
   Preço: R$ 10,00        Item: Apagador    Preço: R$ 5,00        Item: Caneta    Preço: R$ 1,00     Att, [Funcionario] Empresa XYZ.COM   ------------------ Entendeu como seria ? Não pode ser por download, apenas irá gerar com a classe Microsoft.Office.Interop.Word.
Responder

Gostei + 0

26/01/2010

Fabio Mans

Vinicius o que você está querendo não está no escopo da consultoria.     Veja o que atendemos   Suporte Técnico .NET - O que está no escopo:
.NET - análise de código fonte: baixa e média complexidade
AJAX (.net)
Análise e projeto de sistemas
Best Practices (camadas, orientação a objetos, etc)
C#
Desenvolvimento WEB - ASP.NET
LINQ
Persistência/ADO.NET
UML
VB.NET
Visual Studio (IDE)
WebServices/XML


Suporte Técnico .NET - O que não está no escopo:
.NET - análise de código-fonte: alta complexidade
Compact Framework
Componentes de terceiros (.net)
Silverlight
Visual Studio Team System
Windows Forms Veja se este artigo te ajuda.   http://www.codeproject.com/KB/aspnet/WordTemplate2007.aspx   Fabio

Responder

Gostei + 0

26/01/2010

Vinicius Climaco

Fabio,   Mas não estou pedindo nada especifico de WinForms, apenas citei que o meu é WinForms, mas a solução que preciso é do Framework, independente de linguagem... apenas não quero fazer o download, quero gerar o arquivo .doc em massa, conforme disse anteriormente inclusive a descrição que preciso segue na msg anterior.   Att, Vinicius Climaco.
Responder

Gostei + 0

26/01/2010

Fabio Mans

Para salvar em pasta você pode utilizar o método SaveAs.     FileInfo arquivo = new FileInfo("caminho_arquivo/" + FileUpload1.PostedFile.FileName);   if (!arquivo.Exists) { arquivo.SaveAs("caminho_arquivo/" + FileUpload1.PostedFile.FileName); }
Responder

Gostei + 0

26/01/2010

Vinicius Climaco

Certo e usando a classe para alterar e gerar o Word ?? Microsoft.Office.Interop.Word
Responder

Gostei + 0

26/01/2010

Fabio Mans

Utilize a classe deste projeto.   http://www.codeproject.com/KB/aspnet/wordapplication.aspx   Irá facilitar sua vida.     protected void Button2_Click(object sender, EventArgs e) { CCWordApp test; test = new CCWordApp(); test.Open("C:\\Documents and Settings\\f.galante\\Desktop\\TEMP\\test.doc"); test.InsertText("This is the text"); //test.InsertLineBreak; test.Save(); test.Quit(); } Baixei o projeto e coloquei os arquivos na bin, meu Office é 2007, escreveu normalmente. Interop.Microsoft.Office.Core.dll Interop.Word.dll Interop.VBIDE.dll
Responder

Gostei + 0

27/01/2010

Fabio Mans

Conseguiu?
Responder

Gostei + 0

27/01/2010

Vinicius Climaco

Consegui um outro artigo que me atende, lhe mando o link amanha. Pois teria que gerar tudo pela classe que lhe disse... este que vc me enviou não faz isso. 
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar