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:-)
