27. september 2005 - 20:56Der er
20 kommentarer og 1 løsning
Formattering af et Access memofelt i et datagrid
Jeg har et tekstfelt på en formular og gemmer indholdet af tekstfeltet i et Access memofelt. Hvis jeg indsætter et linieskift som dette fra formularen:
Linie 1 Linie 2
og gemmer det, så viser det sig som
Linie 1 Linie 2
når samme memofelt vises i et datagrid. Hvis jeg slår memofeltet op direkte i Access, så har det husket linieskiftet.
Hvordan kan man få datagriddet til at vise to linier i stedet for een?
Hos Computerworld it-jobbank er vi stolte af at fortsætte det gode partnerskab med folkene bag IT-DAY – efter vores mening Danmarks bedste karrieremesse for unge og erfarne it-kandidater.
Hvis du har et textarea er det lettest at erstatte \n med <br> før du gemmer i DB, men ønsker du ikke html i din database er den eneste måde at gøre det bagefter..
Jeg plejer at smide html i database, men det er ikke løsningen hvis dataen skal bruges andetsteds. Men arbejder selv kun med webforms.
Hvis man ikke vil have HTML i databasen, skal tegnene erstattes før de sendes til datagriddet og det må vel så være i det dataset, der sendes til datagriddet. Ved du, hvordan man konkret ville kunne gøre det?
1. Tilføj en ny kolonne til din DataTable, med en expression som automatisk omskriver værdien fra den oprindelige kolonne.
2. Løb igennem datatabellen og ret værdien i de pågældende felt. foreach (DataRow dr in dtResults.Rows) dr["felt"] = ((string)dr["felt"]).Replace(Environment.Newlin, "<br />")
Begge dele kan gøres umiddelbart inden du databinder til dit grid.
I mit eksempel ved dtResults navnet på den DataTable som du har din data i. Hvordan får du data ud af din database? Smid evt. de linjers kode hvor du databinder dit DataGrid.
Ok - jeg løfter normalt min data op i en DataTable, hvilket (IMO) gør det lettere at manipulere med data'en.
Er ikke selv hjemmevandt i VB.NET, men forsøger lige:
Dim objConn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & server.mappath("/data/A-Nees.mdb") & ";") objConn.Open()
Dim dataSet As New DataSet() Dim adapt As New OleDb.OleDbDataAdapter() Dim strSQL As String
strSQL = "SELECT ...."
adapt.SelectCommand = New OleDbCommand(strSQL, objConn) adapt.Fill(dataSet)
' Nu har vi vores data liggende i et DataSet, og kan lege med det... Dim dataTable As DataTable() = dataSet.Tables[0] For Each DataRow row in dataTable.Rows dataTable["memoFelt"] = CType(dataTable["memoFelt"], String).Replace(Environment.NewLine, "<br />") Next
For at få det korrekte format fra Db med linie skift og det hele skriver jeg således når jeg generere min tabel:
MyConnection.Open() MyCommand = New OleDbCommand MySQL = "SELECT * FROM News_tbl WHERE News_tbl.NewsID=" & viewstate("NewsID") & ";" 'Response.Write(MySQL) MyCommand.CommandText = MySQL MyCommand.Connection = MyConnection MyReader = MyCommand.ExecuteReader While MyReader.Read
'smid rækken ind i tabellen Table.Rows.Add(TblRow) 'skriv noget i cellen TblCell.Text = MyReader("NewsDate") TblCell.CssClass = "NewsDate" 'tilføj cellen til rækken TblRow.Cells.Add(TblCell)
'og du kan self. fortsætte TblRow = New TableRow TblCell = New TableCell TblCell.Text = MyReader("Headline") TblCell.CssClass = "NewsHeadline" TblRow.Cells.Add(TblCell) Table.Rows.Add(TblRow)
TblRow = New TableRow TblCell = New TableCell TblCell.Text = MyReader("Teaser") TblRow.Cells.Add(TblCell) Table.Rows.Add(TblRow)
TblRow = New TableRow TblCell = New TableCell TblCell.Text = CType(MyReader("NewsText"), String).Replace(Environment.NewLine, "<br />") TblRow.Cells.Add(TblCell) Table.Rows.Add(TblRow)
'til sidst kan du så lægge tabellen ind i din placeholde på siden PHNewsDetails.Controls.Add(Table)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.