webForumDet fria alternativet

lägga in värdet från min nya datagrid i xmlfilen:)

.NET

32 svar · 471 visningar · startad av wwwstekaren

Medlem sedan apr. 2003234 inlägg
Frågan#1

har en funktion som ser ut så här:

protected void DEDR_UpdateNew(object sender, DataGridCommandEventArgs e)
{

		DataSet dataSet = LoadWebs();
		
		DataTable completeTable = dataSet.Tables\[0\];
		DataTable duplicateTable = new DataTable();
		
		System.Data.DataRow datarow = duplicateTable.NewRow();

		int row = Convert.ToInt32(e.Item.ItemIndex);
		TextBox EditText = null;
		DropDownList EditDropDown = null;
		
		
		
		EditText = (TextBox)e.Item.FindControl("txtResponsible");
		dataSet.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;
		
		EditText = (TextBox)list.FindControl("Name");
		dataSet.Tables\[0\].Rows\[row\]\["Name"\] = EditText.Text;
 
		EditText = (TextBox)e.Item.FindControl("txtLastName");
		dataSet.Tables\[0\].Rows\[row\]\["LastName"\] = EditText.Text;
 
		EditText = (TextBox)e.Item.FindControl("txtEmailAddress");
		dataSet.Tables\[0\].Rows\[row\]\["Email"\]= EditText.Text;
 
		EditText = (TextBox)e.Item.FindControl("txtCompany");
		dataSet.Tables\[0\].Rows\[row\]\["Company"\] = EditText.Text;
 
		EditDropDown = (DropDownList)e.Item.FindControl("txtContact");
		dataSet.Tables\[0\].Rows\[row\]\["Contact"\] = EditDropDown.SelectedItem.Text;
		//dataSet.Tables\[0\].Rows.
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		XmlDataGrid.EditItemIndex = -1;
	}

Får detta fel:

Object reference not set to an instance of an object.
på denna raden

dataSet.Tables[0].Rows[row]["LastName"] = EditText.Text;

Medlem sedan juni 20011 732 inlägg
#2

dataSet.Tables[0].Rows[row]["LastName"] finns helt enkelt inte eller så är det din findcontrol som inte fungerar... du kan inte tilldela ett värde på något som inte finns.

Sen krånglar du till det onödigt mycket:


Istället för: 
TextBox EditText = null; 
EditText = (TextBox)e.Item.FindControl("txtResponsible"); 
dataSet.Tables[0].Rows[row]["Responsible"] = EditText.Text; 

Gör så här:
dataSet.Tables[0].Rows[row]["Responsible"] = ((TextBox)e.Item.FindControl("txtResponsible")).Text;
Medlem sedan apr. 2003234 inlägg
#3

Får samma fel
Object reference not set to an instance of an object.

Medlem sedan juni 20011 732 inlägg
#4

Ja, det var inte en lösning på ditt problem alltså, bara ett tips. Problemet är fortfarande att du försöker tilldela ett värde på något som inte finns. :)

Medlem sedan apr. 2003234 inlägg
#5

Förstår inte sorry, är nybörjar på c#

Medlem sedan juni 20011 732 inlägg
#6

Kan inte säga exakt vad som är fel eftersom jag inte vet hur ditt dataset ser ut men vi får väl utgå från att du fyller ditt dataset med data korrekt eftersom du lyckas uppdatera de två första. Finns "txtLastName" eller har du skrivit fel id? Är du säker på att den här platsen finns i ditt dataset, dataSet.Tables[0].Rows[row]["LastName"]? Felet beror alltså på att du försöker tilldela något som inte finns ett värde.

Medlem sedan apr. 2003234 inlägg
#7

okey vill du se alla kod?:)

Medlem sedan apr. 2003234 inlägg
#8

Sorry de första funkar inte heller:( hade bara komenterat bort dem för att kolla om de gjorde något

Medlem sedan juni 20011 732 inlägg
#9

Ah. :) Innan du kastar in en massa kod... börja med att skriva ut och kolla om du hittar texten i någon av dina textboxar:

Response.Write(((TextBox)e.Item.FindControl("txtResponsible")).Text);
Medlem sedan apr. 2003234 inlägg
#10

Object reference not set to an instance of an object. felet får jag

Medlem sedan jan. 20012 204 inlägg
#11

är kanske DataSet New DataSet(); eller hur man skriver i c#..

wwwstekaren använd kodtaggarna nästa gång!

Medlem sedan apr. 2003234 inlägg
#12

hur gör jag det:)?

Medlem sedan apr. 2003234 inlägg
#13

kodtaggar

Medlem sedan apr. 2003234 inlägg
#14

hittade ett fel, kontrollerna i aspx filen hade andra namn men det rfunkar inte ändå har byt ut till detta

EditText = (TextBox)list.FindControl("txtListName");

Medlem sedan juni 20011 732 inlägg
#15

Japp, där har du felet ser jag ju nu (måste varit blind förut). Du måste ange vilken kontroll du ska köra din findcontrol på och på vilken rad. Prova nåt i den här stilen så ska det nog gå bättre:

Response.Write(((TextBox)DataGrid1.Items[e.Item.ItemIndex].FindControl("txtResponsible")).Text);
Medlem sedan juni 20011 732 inlägg
#16

Här kan du lära dig allt om kod-taggar:

http://www.webforum.nu/misc.php?action=bbcode#buttons

Medlem sedan jan. 20012 204 inlägg
#17

wwwstekaren använd (KOD) (/KOD) fast byt ut () mot []

Medlem sedan apr. 2003234 inlägg
#18

okey får testa så här

EditText = (TextBox)list.FindControl("txtListName");
Medlem sedan apr. 2003234 inlägg
#19

detta funkar inte

Response.Write(((TextBox)list.Items[e.Item.ItemIndex].FindControl("txtListName")).Text);

list är id:et på min datagrid i aspx filen

Medlem sedan apr. 2003234 inlägg
#20

ska jag bara lägga in detta i min funktion?

256 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)