Vart initierar du objektet "myDataView" någon stans, och finns den tillgänglig när du kör funktionen?
Mvh, Vide
20 svar · 535 visningar · startad av icaaq
Medans jag ändå håller på...så här kommer nästa problem
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox namn;
protected System.Web.UI.WebControls.Button btnSkicka;
protected System.Web.UI.WebControls.Repeater Repeater1;
protected System.Web.UI.WebControls.TextBox mess;
protected System.Web.UI.WebControls.Repeater myDataView;
private void Page_Load(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
DataSet objDS = new DataSet();
objQuery.Fill(objDS, "gbok");
DataTable objDT = objDS.Tables["gbok"];
DataView objDV = new DataView(objDT);
[b]myDataView.DataSource = objDV;[/b]
myDataView.DataBind();
}.......osv osv
men jag får:
System.NullReferenceException: Object reference not set to an instance of an object
Vad är fel?
Vart initierar du objektet "myDataView" någon stans, och finns den tillgänglig när du kör funktionen?
Mvh, Vide
ok......jag måste ju säg att jag är ny på detta med OOP. men det jag vill åstadkomma är en simpel sida där det finns två st textboxar (Namn och Mess) sen finns det en submit knapp som ska lägga till ett mess.
Det finns också en Repeater där alla tidigare mess ska listas......det är den jag försöker att fylla med värden.....koden för Repeatern ser ut så här
<TABLE id="Table2" cellSpacing="1" cellPadding="1" width="300" border="0">
<asp:Repeater id="rep" runat="server">
<HeaderTemplate>
<TR>
<TD bgcolor="PapayaWhip">
Här kommer era kommentarer!!<hr noshade size="1">
</TD>
</TR>
</HeaderTemplate>
<ItemTemplate>
<TR>
<TD bgcolor="#ffcc99">
<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
säger:<br>
<b>
<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
</b>
</TD>
</TR>
</ItemTemplate>
<AlternatingItemTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
säger:<br>
<b>
<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
</b>
</TD>
</TR>
</AlternatingItemTemplate>
<SeparatorTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<hr noshade size="1">
</TD>
</TR>
</SeparatorTemplate>
<FooterTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<hr noshade size="1">
© icaaq 2002
</TD>
</TR>
</FooterTemplate>
</asp:Repeater></TABLE>
och jag vill fylla den så här, vilket inte går
private void Page_Load(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
DataSet objDS = new DataSet();
objQuery.Fill(objDS, "gbok");
DataTable objDT = objDS.Tables["gbok"];
rep.DataSource = new DataView(objDT);
rep.DataBind();
}
nån som kan guida mig?
Repeater är en klass. Alla klasser måste initieras med new, till skillnad mot strukturer (och till skillnad mot C++).
A a; // Giltigt för strukturer och i C++ även för klasser
A a = new A(); // För klasser i C#
A *a = new A(); // Samma sak i C++
Lägg alltså till
myDataView = new Repeater();
före du använder klassinstansen.
ok......nu funkar det.....jag la till
Repeater rep = new Repeater();
rep.DataSource = new DataView(objDT);
rep.DataBind();
.......nu till nästa.......
jag har denna när jag klickar på knappen.
private void btnSkicka_Click(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES("+ namn.Text +", "+ mess.Text +")";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
objConnect.Open();
objCommand.ExecuteNonQuery();
objConnect.Close();
}
men jag får No value given for one or more required parameters. hur gör jag för att skriva ut SQL satsen....??så jag ser vad som är fel, eller om ni ser vad som är fel ??
private void btnSkicka_Click(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES('"+ namn.Text +"', '"+ mess.Text +"')";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
[b]objConnect.Open();[/b]
objCommand.ExecuteNonQuery();
objConnect.Close();
}
jag får No value given for one or more required parameters.
på den feta raden ...vad är det som saknas??
Aha, du måste skriva så här:
objConnect.Connection.Open();
objCommand.ExecuteNonQuery();
objConnect.Connection.Close();
Hm... prova så här då:
objCommand.Connection.Open();
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
noap......nu har jag så här
[SIZE=1]
private void btnSkicka_Click(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "INSERT INTO t_boken(f_namn, f_mess)VALUES('"+ namn.Text +"', '"+ mess.Text +"')";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
[b]objCommand.Connection.Open();[/b]
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
}
[/SIZE]
den feta raden blir
No value given for one or more required parameters.
Jag ser inte riktigt vad som är fel men prova detta så kanske man får en ledtråd:
private void btnSkicka_Click(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "INSERT INTO t_boken(f_namn, f_mess) VALUES ('"+ namn.Text +"', '"+ mess.Text +"')";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbCommand objCommand = new OleDbCommand(strSQL, objConnect);
try
{
objCommand.Connection.Open();
objCommand.ExecuteNonQuery();
objCommand.Connection.Close();
}
catch(OleDbException ex)
{
Response.Write(ex.Message)
}
}
Jag kan inte se något fel i den kod du har skickat upp här. I sista exemplet så prövar du koden och om den inte fungerar så catchar du ett oledbexception. Att det inte händer något när du catchar en oledbexception beror på att det inte finns något oledbexception att catcha... mao det är något annat fel. Prova en try and catch och catcha alla exceptions... jag tror man skriver så här:
try {
kod som testas
}
catch (Exception ex) {
Response.Write(ex.ToString());
}
Det kanske är något helt annat som är fel? Nu är jag ingen expert på det här men det kanske är något simpelt fel som inte alls har med den här koden att göra (även om det väl inte är troligt). Är db-filen skrivskyddad? Får du ut text ur namn.Text och om inte, tillpåter du nollvärden i din db?
Skapa en ny sida och gör exakt likadant och se om du får samma fel då också.
Det bör vara något med din sql-sats. Har du mellanslag i din sql-sats (före och efter VAULES)!? Jag tror att du behöver det nämligen, i ditt exempel har du skrivit ihop VALUES mellan parenteserna. SKriv exakt så här:
string strSQL = "INSERT INTO t_boken(f_namn, f_mess) VALUES ('"+ namn.Text +"', '"+ mess.Text +"')";
det var jag som inte hade alla sinnen i form igår........det funkade jätte bra när jag la dit try, catch ....
men vad som inte funkar är databindningen........
private void Page_Load(object sender, System.EventArgs e)
{
string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=G:\\Data\\net.mdb;";
string strSQL = "SELECT f_namn, f_mess FROM t_boken ORDER BY f_id DESC";
OleDbConnection objConnect = new OleDbConnection(strConnect);
OleDbDataAdapter objQuery = new OleDbDataAdapter(strSQL, objConnect);
DataSet objDS = new DataSet();
objQuery.Fill(objDS, "gbok");
DataTable objDT = objDS.Tables["gbok"];
Repeater rep = new Repeater();
rep.DataSource = new DataView(objDT);
rep.DataBind();
}
......och repeteatern ser ut så här
<asp:Repeater id="rep" runat="server">
<HeaderTemplate>
<TR>
<TD bgcolor="PapayaWhip">
Här kommer era kommentarer!!<hr noshade size="1">
</TD>
</TR>
</HeaderTemplate>
<ItemTemplate>
<TR>
<TD bgcolor="#ffcc99">
<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
säger:<br>
<b>
<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
</b>
</TD>
</TR>
</ItemTemplate>
<AlternatingItemTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<%# DataBinder.Eval(Container.DataItem, "f_namn") %>
säger:<br>
<b>
<%# DataBinder.Eval(Container.DataItem, "f_mess") %>
</b>
</TD>
</TR>
</AlternatingItemTemplate>
<SeparatorTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<hr noshade size="1">
</TD>
</TR>
</SeparatorTemplate>
<FooterTemplate>
<TR>
<TD bgcolor="PapayaWhip">
<hr noshade size="1">
© icaaq 2002
</TD>
</TR>
</FooterTemplate>
</asp:Repeater>
några förslag ??
Prova att skapa en dataview istället som du fyller med ditt dataset. Sedan kan du fylla din repeater med din dataview.
DataView dv = objDS.Tables["gbok"].DefaultView;
rep.DataSource = dv;
rep.DataBind();
Alternativt om du vill ha din nuvarande struktur, testa att lägga till Defaultview såhär:
DataTable objDT = objDS.Tables["gbok"][B].DefaultView[/B];
det funkade...tack så mycket.....vill ni se resultatet så kolla här....
detta är en väldigt avancerad sida så håll i er ;)
som ni ser funkar den inte klockrent.......vad är det som är fel??