Avatar billede mema Nybegynder
12. maj 2006 - 18:38 Der er 13 kommentarer og
1 løsning

Visning af en database -række i en ny formular-lignende formular

Hej,
Jeg har en Access databasen med 5 kolloner:
- PersonID PK-Autonummerering
- Navn    Tekstboks
- Adresse  Tekstboks
- Dato    Dato og klokkeslæt
- Bemerkninger  Notat

Det jeg ville gerne kunne, er at vise database-rækkerne (hver for sig) i en formular-lignende formular (ikke redigerbart - det kan være labels, der viser dataerne).

Jeg har hørt, at man gøre det ved at bruge Master/detail løsning.
Det jeg har lavet indtil nu er at oprette en datagrid (Mater1.aspx) - forsynet med et felt: asp:HyperLinkColumn som linker til Detail1.aspx - og virker godt. Her er codebehind for min Master1.aspx.cs:
----
....
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;

namespace EkspertenDk
{
/// <summary>
public class Master1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid grid;
   
protected void Page_Load(object sender, EventArgs e)
{
// håndtering af databinding
if (!IsPostBack)
{
BindGrid();
}
}

// databinding
private void BindGrid()
{
grid.DataSource = GetData();         
grid.DataBind();
}

private DataTable GetData()
{
string strConn, strCmd;
strConn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("Data/Person.mdb");
strCmd = "SELECT PersonID, Navn, Adresse, Dato, Bemerkninger FROM person";
OleDbDataAdapter oCMD = new OleDbDataAdapter(strCmd, strConn);
DataSet oDS = new DataSet();
oCMD.Fill(oDS, "person");
DataTable dt = oDS.Tables["person"];
return dt;
}

#region Web Form Designer generated code
....
....
#endregion
}
}
-----
OG, der virker også pænt. MEN jeg har problem ved at vise alle slags input-felter i labels, som jeg har i Datail1.aspx. Der vises kun tekstfelter rigtig, og jeg kunne ikke finde ud af hvodan kan jeg vise følgende felter:
- ID feltet
- Dato feltet
- Tekstområde (Notat i Access) feltet.
Min kode til Detail1.aspx.cs er:
----
....
....
using System.Data.OleDb;

namespace EkspertenDk
{
/// <summary>
   
public class Detail1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label lblID;
protected System.Web.UI.WebControls.Label lblNavn;
protected System.Web.UI.WebControls.Label lblAdresse;
protected System.Web.UI.WebControls.Label lblDato;
protected System.Web.UI.WebControls.Label lblBemerkning;
   
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
InsertPersonValues();
}
}

private void InsertPersonValues()
{
// jeg henter data og sætter manuelt properties på controllerne
using (OleDbConnection connection = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + MapPath("Data/Person.mdb")))
using (OleDbCommand command = new OleDbCommand("SELECT PersonID, Navn, Adresse, Dato FROM person WHERE PersonID = @PersonID", connection))
{
                command.Parameters.Add("@PersonID", typeof(int));
command.Parameters["@PersonID"].Value = int.Parse(Request.QueryString["PersonID"]);
command.Connection.Open();
using (OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection))
{                   
if (reader.Read())
{
//FØLGENDE LINIE VIRKER IKKE
//lblID.Text = reader.GetString(reader.GetOrdinal("PersonID"));
                        lblNavn.Text = reader.GetString(reader.GetOrdinal("Navn"));
lblAdresse.Text = reader.GetString(reader.GetOrdinal("Adresse"));
//FØLGENDE LINIE VIRKER HELLER IKKE
lblDato.Text = Convert.ToDateTime(reader.GetValue(reader.GetValue(Dato)));
//OGSÅ FØLGENDE LINIE VIRKER IKKE
//lblBemerkning.Text = reader.GetString(reader.GetOrdinal("Bemerkninger"));
}
}
}
}
#region Web Form Designer generated code
....
....
#endregion
}
}
----
Fejlmeddelelse i browseren:
....
Exception Details: System.InvalidCastException: The data value could not be converted for reasons other than sign mismatch or data overflow. For example, the data was corrupted in the data store but the row was still retrievable.
....

Jeg bliver meget glad at få hjælp til løsning af dette problem. Det haster også for mig:-)
Avatar billede dr_chaos Nybegynder
12. maj 2006 - 18:59 #1
bruger du asp.net 2.0 ?

Så kan du lave det med et gridview og detailsview ?
Avatar billede mema Nybegynder
12. maj 2006 - 19:16 #2
Desværre ikke. Serveren hvor jeg skal uploade til, har installeret kun 1.1.
Please hjælp alligevel.
Avatar billede dr_chaos Nybegynder
12. maj 2006 - 19:49 #3
Kan du ikke bruge
reader.GetInt32((reader.GetOrdinal("PersonID")); osv ?
Avatar billede mema Nybegynder
12. maj 2006 - 20:01 #4
Ja, det har jeg prøvet før. Det har jeg også gjort nu. Men jeg får så følgende:
"Cannot implicitely convert type 'int' to 'string'".
Og så hvis jeg skriver:
reader.GetInt32(reader.GetOrdinal(PersonID); Så får jeg følgende:
"The name 'PersonID' does not exist in the class og namespace 'EkspertenDK.Detail1'"
Avatar billede mema Nybegynder
12. maj 2006 - 20:03 #5
Rettelse af seneste kommentar:
...
Og så hvis jeg skriver:
reader.GetInt32(reader.GetOrdinal(PersonID)); Så får jeg følgende:
"The name 'PersonID' does not exist in the class og namespace 'EkspertenDK.Detail1'"
...
Avatar billede dr_chaos Nybegynder
12. maj 2006 - 20:30 #6
Husk "":

lblID.Text = reader.GetInt32((reader.GetOrdinal("PersonID")).ToString();
Avatar billede mema Nybegynder
12. maj 2006 - 20:43 #7
Jaaa, tusind tak. Jeg har prøvet flere gange på forskellige måde. Men OK. Nu virker ID-feltet. Men hvad med "Dato" og "Bemerkninger" felterne?
Avatar billede mema Nybegynder
12. maj 2006 - 20:45 #8
Dato og Bemerkninger felterne er sat i Access databasen som:
Dato -> Dato og klokkeslæt
Bemerkninger -> Notat (textarea)
Avatar billede dr_chaos Nybegynder
13. maj 2006 - 08:31 #9
lblDato.Text = Convert.ToDateTime(reader["Dato"]);
lblBemerkning.Text = reader["Bemerkninger"].ToString();
Avatar billede mema Nybegynder
13. maj 2006 - 13:19 #10
Ved denne linie:
lblDato.Text = Convert.ToDateTime(reader["Dato"]);
får jeg følgende fejlmeddelelse:
Cannot implicity convert type 'System.DataTime' to 'String'

lblBemerkning.Text = reader["Bemerkninger"].ToString(); virker perfekt. Tak.

Du må gerne sende et svar:-)
Avatar billede dr_chaos Nybegynder
13. maj 2006 - 13:22 #11
Du skal bare bruge:
reader["Dato"].ToString();

Den korteste måde at få noget ud af en reader er
reader["feltid"]
Avatar billede mema Nybegynder
13. maj 2006 - 13:46 #12
Det virker godt. Kan man ikke bruge ToShortDate... et eller andet sted, sådan at den viser kun datoen og ikke klokkeslæt?
Avatar billede dr_chaos Nybegynder
13. maj 2006 - 13:50 #13
f.eks:
reader["Dato"].ToString("dd-MM-yyyy");
Avatar billede mema Nybegynder
14. maj 2006 - 00:11 #14
Men den virker ikke og giver mig:
No overload for method ToString takes 1 urgument.
Men nu virker den med denne:
lblDato.Text = reader.GetDateTime(reader.GetOrdinal("Dato")).ToShortDateString();
Tak for denne gang.
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester