Asp.net MVC导出表格到Excel | 外键显示

我想从数据库中导出excel的学生列表。

我成功地将我的过滤数据导出到Excel文件。

它看起来像这样: 图片

问题是我想显示ID引用的表的信息,而不是ID包含ID的字段。

例如,有一个名为“Group”的表,它包含“GroupID”,“Name”和“Number”

CREATE TABLE [dbo].[Group] ( [GroupID] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (10) NOT NULL, [Number] VARCHAR (10) NOT NULL, PRIMARY KEY CLUSTERED ([GrupaID] ASC) ); 

所以我想在excel文件中的“GroupID”列中显示来自“Group”表的数据,所以而不是GroupID,它是“7”,从Group Table中显示类似Name + Number的数据。

以下是一些项目信息:

– 我想保存在Excel文件中的学生表

 CREATE TABLE [dbo].[Student] ( [Nume] VARCHAR (20) NOT NULL, [Prenume] TEXT NOT NULL, [Nota] INT NOT NULL, [GrupaID] INT NOT NULL, [ConducatorID] INT NOT NULL, [TPracticaID] INT NOT NULL, [PerioadaID] INT NOT NULL, [StudentID] INT IDENTITY (1, 1) NOT NULL, [LocPracticaID] INT NOT NULL, PRIMARY KEY CLUSTERED ([StudentID] ASC), CONSTRAINT [FK_Student_ToTable_1] FOREIGN KEY ([ConducatorID]) REFERENCES [dbo].[Conducator] ([ConducatorID]), CONSTRAINT [FK_Student_ToTable_3] FOREIGN KEY ([PerioadaID]) REFERENCES [dbo].[Perioada] ([PerioadaID]), CONSTRAINT [FK_Student_ToTable_2] FOREIGN KEY ([TPracticaID]) REFERENCES [dbo].[Tpractica] ([TpracticaID]), CONSTRAINT [FK_Student_ToTable_4] FOREIGN KEY ([LocPracticaID]) REFERENCES [dbo].[LocPractica] ([LocPracticaID]), CONSTRAINT [FK_Student_ToTable] FOREIGN KEY ([GrupaID]) REFERENCES [dbo].[Grupa] ([GrupaID]) ); 

我存储了导出function的会话信息

  if (!string.IsNullOrEmpty(grupString)) { //Filter student = student.Where(s => (s.Grupa.Specialitate + s.GrupaID).Contains(grupString)); } //Session storing student Session["student"] = student.ToList<Student>(); ; return View(student); 

这里是导出function:修改代码受Hadi Hassan的回复启发:

 public void ExportToExcel(string grupString) { var student = (List<Student>)Session["student"]; var gv = new GridView(); gv.DataSource =(from e in db.Student select new { Nume = e.Nume, Prenume = e.Prenume, Nota = e.Nota, Grupa = e.Grupa.Specialitate+" "+e.Grupa.Numar, /* The problem with cell space happens here ->**Conducator = e.Conducator.Nume+" "e.Conducator.Prenume ** when i try to make this cell made from adition of 2 string like i did before here **Grupa = e.Grupa.Specialitate+" "+e.Grupa.Numar,** -here the string are short and fit in the cell but when i try to do the same here **Conducator = e.Conducator.Nume+" "e.Conducator.Prenume **, the strings are a little longer and throws and exception */ Conducator = e.Conducator.Nume, Tpractica = e.Tpractica.Tip, Perioada =e.Perioada.An, LocPractica= e.LocPractica.Denumire, } ).ToList(); gv.DataBind(); Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=DemoExcel.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; StringWriter objStringWriter = new StringWriter(); HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter); gv.RenderControl(objHtmlTextWriter); Response.Output.Write(objStringWriter.ToString()); Response.Flush(); Response.End(); } 

现在我能够显示数据,但它显示所有的数据,但它不被过滤了,如果一行中的单元格中的文本比列的标题长,它比它抛出和exception。

修改后的Excel文件看起来像这样 图片

1)我如何只导出过滤的数据? 2)如何扩大细胞,使我可以显示更长的文字?

你可以做以下事情

 public void ExportToExcel() { var student = (List<Student>)Session["student"]; var groups = **YourDBContextGoesHere**.Groups.ToList(); // extract new result from the student dbset and join it // with groups dbset to get the name // Note: only one trip to the db to get the group names since // the student already stored in the session var result = from s in student join g in groups on s.GroupID = g.GroupID select new { // you can define a ModelView with whatever properties you want inside, but I will assume that you want the following Nume = s.Name, Prenume = s.Prenume, Nota= s.Nota, GrupaID = g.Name, // here you put the name of the group ConducatorID =s.ConducatorID, TPracticaID = s.TPracticaID, PerioadaID = s.PerioadaID , StudentID = StudentID, }; var gv = new GridView(); gv.DataSource =result.ToList(); // here you put the result gv.DataBind(); Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=DemoExcel.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; StringWriter objStringWriter = new StringWriter(); HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter); gv.RenderControl(objHtmlTextWriter); Response.Output.Write(objStringWriter.ToString()); Response.Flush(); Response.End(); } 

希望对你有帮助

这是上述问题的解决scheme:

 public void ExportToExcel(string grupString) { var student = (List<Student>)Session["student"]; var groups = db.Grupa.ToList(); var result = (from e in student select new { Nume = e.Nume, Prenume = e.Prenume, Nota = e.Nota, Grupa = e.Grupa.Specialitate + " " + e.Grupa.Numar, Conducator = e.Conducator.Nume+" "+ e.Conducator.Prenume, Tpractica = e.Tpractica.Tip, Perioada = e.Perioada.An, LocPractica = e.LocPractica.Denumire, }).ToList(); var gv = new GridView(); gv.DataSource = result; gv.DataBind(); Response.ClearContent(); Response.Buffer = true; Response.AddHeader("content-disposition", "attachment; filename=DemoExcel.xls"); Response.ContentType = "application/ms-excel"; Response.Charset = ""; StringWriter objStringWriter = new StringWriter(); HtmlTextWriter objHtmlTextWriter = new HtmlTextWriter(objStringWriter); gv.RenderControl(objHtmlTextWriter); Response.Output.Write(objStringWriter.ToString()); Response.Flush(); Response.End(); } 

我能够出口所有的数据和过滤excel谢谢你哈桑哈桑的帮助。