webForumDet fria alternativet

Sortera en xml fil i en datagrid

.NET

17 svar · 350 visningar · startad av wwwstekaren

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

Nu är det dax igen:)

Har en xml fil där det ligger personer som listas i en datagrid det funkar jätte bra. Har åvanför varje cell ex: person, ålder , bor
Under dessa så listas xml filen upp ex

Person Ålder Bor
Nisse 22 Stockholm
Lars 25 Söder
mm

Nu vill jag ha hjälp med en funktion som listar i ex bokstavsordning när man trycker på person stigande när man trycker på ålder mm

Bifogar mina filer här neda
cs filen:

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Globalization;
using System.IO;

namespace beerlist2
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Label ErrorMessage;
protected System.Web.UI.WebControls.LinkButton LinkButton1;
protected System.Web.UI.WebControls.DataGrid WebData;
protected System.Web.UI.WebControls.TextBox Responsible;
protected System.Web.UI.WebControls.TextBox Rows;

	private void Page_Load(object sender, System.EventArgs e)
	{
		// Put user code to initialize the page here
		if (!(Page.IsPostBack))
		{
			WebData.DataSource = LoadWebs();
			WebData.DataBind();
		}
	}
	protected DataSet LoadWebs()
	{
		string sourceXml = Server.MapPath("webs.xml");
		if (!(File.Exists(sourceXml)))
		{
			return null;
		}
		DataSet cachedDataSet = (DataSet)Session\["Webs"\];
		if (!(cachedDataSet == null))
		{
			return cachedDataSet;
		}
		DataSet dataSet = new DataSet();
		try
		{ 
			dataSet.ReadXml(sourceXml);
			Session\["Webs"\] = dataSet;
		}
		catch (Exception e)
		{
			ErrorMessage.Text = e.Message;
			dataSet = null;
		}
		return dataSet;
	}

	protected void DEDR_Edit(object sender, DataGridCommandEventArgs e)
	{
		WebData.EditItemIndex = Convert.ToInt32(e.Item.ItemIndex);
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
	}

	protected void DEDR_Update(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet  = LoadWebs();
		string CheckName = ((TextBox)e.Item.FindControl("txtName")).Text;// hämtar värdet från textboxen i formuläret
		string CheckLastName = ((TextBox)e.Item.FindControl("txtLastName")).Text;
		string CheckEmail = ((TextBox)e.Item.FindControl("txtEmailAddress")).Text;
		string CheckCompany = ((TextBox)e.Item.FindControl("txtCompany")).Text;
		string CheckContact = ((DropDownList)e.Item.FindControl("txtContact")).SelectedItem.Text;
		string Check = CheckName + CheckLastName + CheckEmail + CheckCompany + CheckContact;
		TextBox EditText = null;
		DropDownList EditDropDown = null;
		bool found = false;	
		foreach(DataRow Row in dataSet.Tables\[0\].Rows)
		{
			//if(Check == CheckName + CheckLastName)
			//if(Row\["Name"\].ToString() == CheckName ) //Funkar
			if(Row\["Name"\].ToString() + Row\["LastName"\].ToString() + Row\["Email"\].ToString() + Row\["Company"\].ToString() + Row\["Contact"\].ToString() == Check)
			{
				found = true;
				Response.Write("Personen du försöker lägga till finns redan");
				break;
			}
		}
		if(!found)
		{
			int row = Convert.ToInt32(e.Item.ItemIndex);
	
			EditText = (TextBox)e.Item.FindControl("txtResponsible");
			dataSet.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;

			EditText = (TextBox)e.Item.FindControl("txtName");
			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;
			WebData.EditItemIndex = -1;
		}
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
	}

	protected void DEDR_Cancel(object sender, DataGridCommandEventArgs e)
	{
		WebData.EditItemIndex = -1;
		Session\["Webs"\] = null;
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
	}

	protected void DEDR_Delete(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet = LoadWebs();
		int row = Convert.ToInt32(e.Item.ItemIndex);
		dataSet.Tables\[0\].Rows\[row\].Delete();
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		WebData.EditItemIndex = -1;
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
	}

	protected void DEDR_Add(object sender, EventArgs e)
	{
		DataSet dataSet = LoadWebs();
		DataRow newRow;
		newRow = dataSet.Tables\[0\].NewRow(); 
		newRow\["Responsible"\] = "";
		newRow\["Name"\] = "";
		newRow\["LastName"\] = "";
		newRow\["Email"\] = "";
		newRow\["Company"\] = "";
		newRow\["Contact"\] = "";
		dataSet.Tables\[0\].Rows.InsertAt(newRow,0);  //ändra för var informuläret ska hamna, nu hamnar det högst upp i tabellen
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
		Session\["Webs"\] = null;
		WebData.EditItemIndex = 0;//WebData.Items.Count - 1;
		WebData.DataSource = LoadWebs();
		WebData.DataBind();
	}

	\#region Web Form Designer generated code
	override protected void OnInit(EventArgs e)
	{
		//
		// CODEGEN: This call is required by the ASP.NET Web Form Designer.
		//
		InitializeComponent();
		base.OnInit(e);
	}
	
	/// \<summary\>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// \</summary\>
	private void InitializeComponent()
	{    
		this.Load += new System.EventHandler(this.Page_Load);

	}
	\#endregion
}

}

xml fil:

<?xml version="1.0" standalone="yes"?>
<Webs>
<Web>
<Responsible />
<Name>Kurt</Name>
<LastName>Nilsson</LastName>
<Email>kurt.nilsson@ibm.se</Email>
<Company>IBM</Company>
<Contact>Kund</Contact>
</Web>
<Web>
<Responsible />
<Name>Kurt</Name>
<LastName>Johansson</LastName>
<Email>kurt@ibm.se</Email>
<Company>IBM</Company>
<Contact>Kund</Contact>
</Web>
</webs>

Medlem sedan juni 20011 732 inlägg
#2

Det finns inbyggt stöd för att sortera data i en datagrid. Mer läsning:
http://samples.gotdotnet.com/quickstart/aspplus/doc/webdataaccess.aspx#sort

Medlem sedan apr. 2003234 inlägg
#3

tackar ska kolla det nu

Medlem sedan apr. 2003234 inlägg
#4

Sortera en xml fil i en datagrid del 2

Hej har nu fått det mesta att funka ska nu lägga in två saker som jag håller på med i samma projekt.

aspx.cs filen

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Globalization;
using System.IO;

namespace sortxmldata
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid XmlDataGrid;
protected System.Web.UI.WebControls.Label ErrorMessage;
protected System.Web.UI.WebControls.LinkButton LinkButton1;
protected System.Web.UI.WebControls.TextBox Responsible;
protected System.Web.UI.WebControls.TextBox Rows;

	string SortField 
	{

		get 
		{
			object o = ViewState\["SortField"\];
			if (o == null) 
			{
				return String.Empty;
			}
			return (string)o;
		}

		set 
		{
			if (value == SortField) 
			{
				//if ascending change to descending or vice versa.
				SortAscending = !SortAscending;
			}
			ViewState\["SortField"\] = value;
		}
	}

	// using ViewState for SortAscending property
	bool SortAscending 
	{

		get 
		{
			object o = ViewState\["SortAscending"\];
			if (o == null) 
			{
				return true;
			}
			return (bool)o;
		}

		set 
		{
			ViewState\["SortAscending"\] = value;
		}
	}

	protected void Page_Load(Object src, EventArgs e)
	{
		if(!IsPostBack)
		{
			XmlDataGrid.DataSource = LoadWebs();
			XmlDataGrid.DataBind();
			BindGrid();
		}
	}

	protected void BindGrid(object sender, DataGridCommandEventArgs e)
	{
		//TextBox EditText = null;
		string dataUrl = "webs.xml";
		//string schemaUrl = "books.xsd";
	
		DataSet ds = new DataSet();
		//ds.ReadXmlSchema(Server.MapPath(schemaUrl));
		ds.ReadXml(Server.MapPath(dataUrl));
	
		DataView dv = new DataView(ds.Tables\[0\]);
		DataTable dt = dv.Table;
	
		//Custom names for the columns
		dt.Columns\[0\].ColumnName = "Ansvarig";
		dt.Columns\[1\].ColumnName = "F&#246;rnamn";
		dt.Columns\[2\].ColumnName = "Efternamn";
		dt.Columns\[3\].ColumnName = "E-post";
		dt.Columns\[4\].ColumnName = "F&#246;retag";
		dt.Columns\[5\].ColumnName = "Typ av O2-kontakt";

		int row = Convert.ToInt32(e.Item.ItemIndex);
		dt.DataSet.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;
	
		//Sorting criteria
		dv.Sort = SortField;
		if (!SortAscending)
		{
			dv.Sort += " DESC";	//append "DESC" to the sort field name in order to sort descending
		}
    
		XmlDataGrid.DataSource = dv;
		XmlDataGrid.DataBind();
	
	}
	protected void SortGrid(Object src, DataGridSortCommandEventArgs e)
	{
		XmlDataGrid.CurrentPageIndex = 0;
		SortField = e.SortExpression;	//get the requested sorting field name and set it to SortField
		BindGrid();
	}

	protected DataSet LoadWebs()
	{
		string sourceXml = Server.MapPath("webs.xml");
		if (!(File.Exists(sourceXml)))
		{
			return null;
		}
		DataSet cachedDataSet = (DataSet)Session\["Webs"\];
		if (!(cachedDataSet == null))
		{
			return cachedDataSet;
		}
		DataSet dataSet = new DataSet();
		try
		{ 
			dataSet.ReadXml(sourceXml);
			Session\["Webs"\] = dataSet;
		}
		catch (Exception e)
		{
			ErrorMessage.Text = e.Message;
			dataSet = null;
		}
		return dataSet;
	}

	protected void DEDR_Edit(object sender, DataGridCommandEventArgs e)
	{
		XmlDataGrid.EditItemIndex = Convert.ToInt32(e.Item.ItemIndex);
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Update(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet  = LoadWebs();
		string CheckName = ((TextBox)e.Item.FindControl("txtName")).Text;// hämtar värdet från textboxen i formuläret
		string CheckLastName = ((TextBox)e.Item.FindControl("txtLastName")).Text;
		string CheckEmail = ((TextBox)e.Item.FindControl("txtEmailAddress")).Text;
		string CheckCompany = ((TextBox)e.Item.FindControl("txtCompany")).Text;
		string CheckContact = ((DropDownList)e.Item.FindControl("txtContact")).SelectedItem.Text;
		string Check = CheckName + CheckLastName + CheckEmail + CheckCompany + CheckContact;
		TextBox EditText = null;
		DropDownList EditDropDown = null;
		bool found = false;	
		foreach(DataRow Row in dataSet.Tables\[0\].Rows)
		{
			//if(Check == CheckName + CheckLastName)
			//if(Row\["Name"\].ToString() == CheckName ) //Funkar
			if(Row\["Name"\].ToString() + Row\["LastName"\].ToString() + Row\["Email"\].ToString() + Row\["Company"\].ToString() + Row\["Contact"\].ToString() == Check)
			{
				found = true;
				Response.Write("Personen du försöker lägga till finns redan");
				break;
			}
		}
		if(!found)
		{
			int row = Convert.ToInt32(e.Item.ItemIndex);
	
			EditText = (TextBox)e.Item.FindControl("txtResponsible");
			dataSet.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;

			EditText = (TextBox)e.Item.FindControl("txtName");
			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;
		}
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Cancel(object sender, DataGridCommandEventArgs e)
	{
		XmlDataGrid.EditItemIndex = -1;
		Session\["Webs"\] = null;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Delete(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet = LoadWebs();
		int row = Convert.ToInt32(e.Item.ItemIndex);
		dataSet.Tables\[0\].Rows\[row\].Delete();
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		XmlDataGrid.EditItemIndex = -1;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Add(object sender, EventArgs e)
	{
		DataSet dataSet = LoadWebs();
		DataRow newRow;
		newRow = dataSet.Tables\[0\].NewRow(); 
		newRow\["Responsible"\] = "";
		newRow\["Name"\] = "";
		newRow\["LastName"\] = "";
		newRow\["Email"\] = "";
		newRow\["Company"\] = "";
		newRow\["Contact"\] = "";
		dataSet.Tables\[0\].Rows.InsertAt(newRow,0);  //ändra för var informuläret ska hamna, nu hamnar det högst upp i tabellen
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
		Session\["Webs"\] = null;
		XmlDataGrid.EditItemIndex = 0;//WebData.Items.Count - 1;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}
	\#region Web Form Designer generated code
	override protected void OnInit(EventArgs e)
	{
		//
		// CODEGEN: This call is required by the ASP.NET Web Form Designer.
		//
		InitializeComponent();
		base.OnInit(e);
	}
	
	/// \<summary\>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// \</summary\>
	private void InitializeComponent()
	{    
		this.Load += new System.EventHandler(this.Page_Load);
	}
	\#endregion
}

}

Medlem sedan apr. 2003234 inlägg
#5

aspx filen

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="sortxmldata.WebForm1" %>
<html>
<head>
<title>Sorting different datatypes in XML using DataGrid</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style>
BODY { FONT-SIZE: 10px; FONT-FAMILY: verdana }
TD { FONT-SIZE: 10px; FONT-FAMILY: verdana }
DIV { FONT-SIZE: 10px; FONT-FAMILY: verdana }
SELECT { FONT-SIZE: 10px; FONT-FAMILY: verdana }
INPUT { FONT-SIZE: 10px; FONT-FAMILY: verdana }
.headlineS { FONT-WEIGHT: bold; FONT-SIZE: 18px; PADDING-BOTTOM: 8px; COLOR: #888888 }
.name { }
.button { }
</style>
</head>
<body bgColor="#ffffff">
<form runat="server" ID="Form1">
<div class="headlineS"><em>Fredagsölslistan  ett.noll</em></div>
<p>

			\<asp:datagrid CssClass="asptable" id="XmlDataGrid" CellSpacing="1" runat="server" OnSortCommand="SortGrid" AllowSorting="True" AutoGenerateColumns="False"\>
				\<AlternatingItemStyle BackColor="Gainsboro"\>\</AlternatingItemStyle\>
			\<ItemStyle BackColor="White"\>\</ItemStyle\>
			\<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="DodgerBlue"\>\</HeaderStyle\>
			\<Columns\>
				\<asp:TemplateColumn HeaderText="Ansvarig"\>
					\<ItemTemplate\>
						\<div class="name"\>\<%# DataBinder.Eval(Container.DataItem, "Responsible") %\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:TextBox id="txtResponsible" Text='\<%# DataBinder.Eval(Container.DataItem, "Responsible") %\>' size="25" runat="server"/\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn HeaderText="F&#246;rnamn"\>
					\<ItemTemplate\>
						\<div class="name"\>\<a target="\_blank" href='http://\<%# DataBinder.Eval(Container.DataItem, "Name") %\>'\>\<%# DataBinder.Eval(Container.DataItem, "Name") %\>\</a\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:TextBox id="txtName" Text='\<%# DataBinder.Eval(Container.DataItem,"Name") %\>' size="25" runat="server"/\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn HeaderText="Efternamn"\>
					\<ItemTemplate\>
						\<div class="name"\>\<%# DataBinder.Eval(Container.DataItem, "LastName") %\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:TextBox id="txtLastName" Text='\<%# DataBinder.Eval(Container.DataItem,"LastName") %\>' size="25" runat="server"/\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn HeaderText="E-post"\>
					\<ItemTemplate\>
						\<div class="name"\>\<%# DataBinder.Eval(Container.DataItem, "Email") %\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:TextBox id="txtEmailAddress" Text='\<%# DataBinder.Eval(Container.DataItem, "Email") %\>' size="25" runat="server"/\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn HeaderText="F&#246;retag"\>
					\<ItemTemplate\>
						\<div class="name"\>\<%# DataBinder.Eval(Container.DataItem, "Company") %\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:TextBox id="txtCompany" Text='\<%# DataBinder.Eval(Container.DataItem, "Company") %\>' size="25" runat="server"/\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn HeaderText="Typ av O2-kontakt"\>
					\<ItemTemplate\>
						\<div class="name"\>\<%# DataBinder.Eval(Container.DataItem, "Contact") %\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<asp:Dropdownlist id="txtContact" Text='\<%# DataBinder.Eval(Container.DataItem, "Contact") %\>' width="100%" runat="server"\>
							\<asp:ListItem Value="contact1"\>Nätverk\</asp:ListItem\>
							\<asp:ListItem Value="contact2"\>Kund\</asp:ListItem\>
							\<asp:ListItem Value="contact3"\>Leverantör\</asp:ListItem\>
							\<asp:ListItem Value="contact4"\>Partner\</asp:ListItem\>
							\<asp:ListItem Value="contact5"\>Prospekt\</asp:ListItem\>
							\<asp:ListItem Value="contact6"\>Fd O2are\</asp:ListItem\>
						\</asp:Dropdownlist\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
				\<asp:TemplateColumn\>
					\<ItemTemplate\>
						\<div class="button"\>
							\<asp:LinkButton CommandName="Edit" Text="Edit" runat="server" ID="Linkbutton2" /\>\</div\>
						\<div class="button"\>
							\<asp:LinkButton CommandName="Delete" Text="Delete" runat="server" ID="Linkbutton3" /\>\</div\>
					\</ItemTemplate\>
					\<EditItemTemplate\>
						\<div class="button"\>
							\<asp:LinkButton CommandName="Cancel" Text="Cancel" runat="server" ID="Linkbutton4" /\>\</div\>
						\<div class="button"\>
							\<asp:LinkButton CommandName="Update" Text="Update" runat="server" ID="Linkbutton5" /\>\</div\>
					\</EditItemTemplate\>
				\</asp:TemplateColumn\>
			\</Columns\>
		\</asp:datagrid\>\</form\>
	\<table cellSpacing="0" cellPadding="0"\>
		\<tr vAlign="top"\>
			\<td\>\<em\>Monger\</em\> (eng.):&nbsp;
			\</td\>
			\<td\>\<strong\>förmedlare\|spridare\</strong\> av obskyra och/eller tveksamma företeelser 
				såsom t.ex. rykten, narkotika eller webbplatser.\<br\>
				(Ex. \<em\>Warmonger\</em\> (eng.): Krigsspridare)
			\</td\>
		\</tr\>
	\</table\>
	\<br\>
	&nbsp;\<br\>
\</body\>

</HTML>

får fel i aspx.cs filen

No overload for method 'BindGrid' takes '0' arguments

Medlem sedan juni 20011 732 inlägg
#6

Funktionen BindGrid tar två inparametrar:

protected void BindGrid(object sender, DataGridCommandEventArgs e)

Så då kan du inte köra den funktionen med bara BindGrid();
utan att skicka in inparametrar också...

Medlem sedan apr. 2003234 inlägg
#7

hur ska jag skriva här då?

protected void Page_Load(Object src, EventArgs e)
{
if(!IsPostBack)
{
XmlDataGrid.DataSource = LoadWebs();
XmlDataGrid.DataBind();
BindGrid();
}
}

Medlem sedan juni 20011 732 inlägg
#8

Lite snabbt utan att kolla koden så noga (har lite briottom måste med bussen) så kan du ju bara slänga in nåt som den vill ha:

BindGrid(this, new DataGridCommandEventArgs());

Funkar om du inte använder inparametrarna till nåt särskilt i just den funktionen...

Medlem sedan apr. 2003234 inlägg
#9

Sortera en xml fil i en datagrid del 3

BindGrid(this, new DataGridCommandEventArgs());

får detta fel

får fel på new

felmedelande

No overload for method DataGridCommandEventArgs takes '0' argument

Medlem sedan apr. 20012 266 inlägg
#10

vad försöker du göra? finns bra exempel på hur man använder en datagrid på http://samples.gotdotnet.com/quickstart/.

Medlem sedan juni 20011 732 inlägg
#11

Alltså, grundproblemet är att du försöker starta en funktion som kräver två inparametrar (sendern och eventet). Då kan funktionen inte köras om du inte skickar in dessa. I vissa fall så kan du själv konstruera tomma instanser av de objekt som den tar in eftersom dessa ändå inte fyller någon roll i funktionen som sådan, du skickar alltså in de inparametrar funktionen vill ha så körs koden i din funktion.

I det här fallet kräver visst DataGridCommandEventArgs() i sin tur också ett par inparametrar, du kan således inte skapa en instans av eventet utan dessa. Men istälelt för att slänga in dessa också är det kanske läge att fundera på om den koden du vill köra i BindGrid inte kan anropas på något annat sätt, i en funktion som itne tar några inparametrar överhuvudtaget annars är du ute på minerad mark snabbt...

En liten parentes bara, eftersom detta är en följdfråga i en annan tråd så är ett tips att du fortsätter skriva där så är det lättare för alla att förstå ursprungsfrågan och därmed blir det lättare för nytillkomna läsare att hjälpa dig med en lösning! :)

Medlem sedan apr. 2003234 inlägg
#12

Sortera en xml fil i en datagrid del 4

Hej nu har jag problem igen:(

När jag klickar på en länk som den ska sortera efter så funkar det inte

får detta felet

Cannot find column XmlDataGrid_SortCommand.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.IndexOutOfRangeException: Cannot find column XmlDataGrid_SortCommand.

Source Error:

Line 110:
Line 111: //Sorting criteria
Line 112: dv.Sort = SortField; Felet
Line 113: if (!SortAscending)
Line 114: {

ASPX FILEN

<%@ Page language="c#" Codebehind="default.aspx.cs" AutoEventWireup="false" Inherits="beerlist5.WebForm1" %>
<HTML>
<HEAD>
<title>Sorting different datatypes in XML using DataGrid</title>
<meta content="Microsoft Visual Studio 7.0" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="JavaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<style>BODY {
FONT-SIZE: 10px; FONT-FAMILY: verdana
}
TD {
FONT-SIZE: 10px; FONT-FAMILY: verdana
}
DIV {
FONT-SIZE: 10px; FONT-FAMILY: verdana
}
SELECT {
FONT-SIZE: 10px; FONT-FAMILY: verdana
}
INPUT {
FONT-SIZE: 10px; FONT-FAMILY: verdana
}
.headlineS {
FONT-WEIGHT: bold; FONT-SIZE: 18px; PADDING-BOTTOM: 8px; COLOR: #888888
}
.name {

}
.button {

}
</style>
</HEAD>
<body bgColor="#ffffff">
<form id="Form1" runat="server">
<div class="headlineS"><em>Fredagsölslistan  ett.noll</em></div>
<p><asp:datagrid id="XmlDataGrid" runat="server" AutoGenerateColumns="False" AllowSorting="True" OnDeleteCommand="DEDR_Delete" OnUpdateCommand="DEDR_Update" OnCancelCommand="DEDR_Cancel" OnEditCommand="DEDR_Edit" OnSortCommand="SortGrid" CellSpacing="1" CssClass="asptable" BorderWidth="0" BorderStyle="None">
<AlternatingItemStyle BackColor="Gainsboro"></AlternatingItemStyle>
<ItemStyle BackColor="White"></ItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="DodgerBlue"></HeaderStyle>
<Columns>
<asp:TemplateColumn HeaderText="Ansvarig">
<ItemTemplate>
<div class="name"><%# DataBinder.Eval(Container.DataItem, "Responsible") %></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtResponsible" Text='<%# DataBinder.Eval(Container.DataItem, "Responsible") %>' size="25" runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn SortExpression="XmlDataGrid_SortCommand" HeaderText="Förnamn">
<ItemTemplate>
<div class="name"><a target="_blank" href='http://<%# DataBinder.Eval(Container.DataItem, "Name") %>'><%# DataBinder.Eval(Container.DataItem, "Name") %></a></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtName" Text='<%# DataBinder.Eval(Container.DataItem,"Name") %>' size="25" runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Efternamn">
<ItemTemplate>
<div class="name"><%# DataBinder.Eval(Container.DataItem, "LastName") %></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtLastName" Text='<%# DataBinder.Eval(Container.DataItem,"LastName") %>' size="25" runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="E-post">
<ItemTemplate>
<div class="name"><%# DataBinder.Eval(Container.DataItem, "Email") %></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtEmailAddress" Text='<%# DataBinder.Eval(Container.DataItem, "Email") %>' size="25" runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Företag">
<ItemTemplate>
<div class="name"><%# DataBinder.Eval(Container.DataItem, "Company") %></div>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox id="txtCompany" Text='<%# DataBinder.Eval(Container.DataItem, "Company") %>' size="25" runat="server"/>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="Typ av O2-kontakt">
<ItemTemplate>
<div class="name"><%# DataBinder.Eval(Container.DataItem, "Contact") %></div>
</ItemTemplate>
<EditItemTemplate>
<asp:Dropdownlist id="txtContact" Text='<%# DataBinder.Eval(Container.DataItem, "Contact") %>' width="100%" runat="server">
<asp:ListItem Value="contact1">Nätverk</asp:ListItem>
<asp:ListItem Value="contact2">Kund</asp:ListItem>
<asp:ListItem Value="contact3">Leverantör</asp:ListItem>
<asp:ListItem Value="contact4">Partner</asp:ListItem>
<asp:ListItem Value="contact5">Prospekt</asp:ListItem>
<asp:ListItem Value="contact6">Fd O2are</asp:ListItem>
</asp:Dropdownlist>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn>
<ItemTemplate>
<div class="button">
<asp:LinkButton CommandName="Edit" Text="Edit" runat="server" ID="Linkbutton2" /></div>
<div class="button">
<asp:LinkButton CommandName="Delete" Text="Delete" runat="server" ID="Linkbutton3" /></div>
</ItemTemplate>
<EditItemTemplate>
<div class="button">
<asp:LinkButton CommandName="Cancel" Text="Cancel" runat="server" ID="Linkbutton4" /></div>
<div class="button">
<asp:LinkButton CommandName="Update" Text="Update" runat="server" ID="Linkbutton5" /></div>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:datagrid>
</form>
<table cellSpacing="0" cellPadding="0">
<tr vAlign="top">
<td><em>Monger</em> (eng.): 
</td>
<td><strong>förmedlare|spridare</strong> av obskyra och/eller tveksamma företeelser
såsom t.ex. rykten, narkotika eller webbplatser.<br>
(Ex. <em>Warmonger</em> (eng.): Krigsspridare)
</td>
</tr>
</table>
<br>
 <br>
</P>
</body>
</HTML>

Medlem sedan apr. 2003234 inlägg
#13

ASPX.CS filen

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Xml;
using System.Globalization;
using System.IO;

namespace beerlist5
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid XmlDataGrid;
protected System.Web.UI.WebControls.Label ErrorMessage;
protected System.Web.UI.WebControls.LinkButton LinkButton1;
protected System.Web.UI.WebControls.TextBox Responsible;
protected System.Web.UI.WebControls.TextBox Rows;

	string SortField 
	{

		get 
		{
			object o = ViewState\["SortField"\];
			if (o == null) 
			{
				return String.Empty;
			}
			return (string)o;
		}

		set 
		{
			if (value == SortField) 
			{
				//if ascending change to descending or vice versa.
				SortAscending = !SortAscending;
			}
			ViewState\["SortField"\] = value;
		}
	}

	// using ViewState for SortAscending property
	bool SortAscending 
	{

		get 
		{
			object o = ViewState\["SortAscending"\];
			if (o == null) 
			{
				return true;
			}
			return (bool)o;
		}

		set 
		{
			ViewState\["SortAscending"\] = value;
		}
	}

	protected void Page_Load(Object src, EventArgs e)
	{
		if(!IsPostBack)
		{
			//XmlDataGrid.DataSource = LoadWebs();
			//XmlDataGrid.DataBind();
			BindGrid();
		}
	}

	protected void BindGrid()
	{
		
		//TextBox EditText = null;
		//string dataUrl = "webs.xml";
		//string schemaUrl = "books.xsd";
	
		DataSet ds = LoadWebs();
		//ds.ReadXmlSchema(Server.MapPath(schemaUrl));
		//ds.ReadXml(Server.MapPath(dataUrl));
	
		DataView dv = new DataView(ds.Tables\[0\]);
		DataTable dt = dv.Table;
	
		//Custom names for the columns
		//int row = Convert.ToInt32(e.Item.ItemIndex);
		
		//ds.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;

		dt.Columns\[0\].ColumnName = "Responsible";
		dt.Columns\[1\].ColumnName = "Name";
		dt.Columns\[2\].ColumnName = "LastName";
		dt.Columns\[3\].ColumnName = "Email";
		dt.Columns\[4\].ColumnName = "Company";
		dt.Columns\[5\].ColumnName = "Contact";
	
		//Sorting criteria
		dv.Sort = SortField;
		if (!SortAscending)
		{
			dv.Sort += " DESC";	//append "DESC" to the sort field name in order to sort descending
		}
    
		XmlDataGrid.DataSource = dv;
		XmlDataGrid.DataBind();

	}
	protected void SortGrid(Object src, DataGridSortCommandEventArgs e)
	{
		XmlDataGrid.CurrentPageIndex = 0;
		// get the requested sorting field name and set it to SortField SortField = e.SortExpression; BindGrid(); 

	}
	protected void DEDR_Edit(object sender, DataGridCommandEventArgs e)
	{
		XmlDataGrid.EditItemIndex = Convert.ToInt32(e.Item.ItemIndex);
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Update(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet = LoadWebs();
		//DataSet dataSet  = LoadWebs();
		string CheckName = ((TextBox)e.Item.FindControl("txtName")).Text;// hämtar värdet från textboxen i formuläret
		string CheckLastName = ((TextBox)e.Item.FindControl("txtLastName")).Text;
		string CheckEmail = ((TextBox)e.Item.FindControl("txtEmailAddress")).Text;
		string CheckCompany = ((TextBox)e.Item.FindControl("txtCompany")).Text;
		string CheckContact = ((DropDownList)e.Item.FindControl("txtContact")).SelectedItem.Text;
		string Check = CheckName + CheckLastName + CheckEmail + CheckCompany + CheckContact;
		TextBox EditText = null;
		DropDownList EditDropDown = null;
		bool found = false;	
		foreach(DataRow Row in dataSet.Tables\[0\].Rows)
		{
			//if(Check == CheckName + CheckLastName)
			//if(Row\["Name"\].ToString() == CheckName ) //Funkar
			if(Row\["Name"\].ToString() + Row\["LastName"\].ToString() + Row\["Email"\].ToString() + Row\["Company"\].ToString() + Row\["Contact"\].ToString() == Check)
			{
				found = true;
				Response.Write("Personen du försöker lägga till finns redan");
				break;
			}
		}
		if(!found)
		{
			int row = Convert.ToInt32(e.Item.ItemIndex);
	
			EditText = (TextBox)e.Item.FindControl("txtResponsible");
			dataSet.Tables\[0\].Rows\[row\]\["Responsible"\] = EditText.Text;

			EditText = (TextBox)e.Item.FindControl("txtName");
			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;
		}
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Cancel(object sender, DataGridCommandEventArgs e)
	{
		XmlDataGrid.EditItemIndex = -1;
		Session\["Webs"\] = null;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Delete(object sender, DataGridCommandEventArgs e)
	{
		DataSet dataSet = LoadWebs();
		int row = Convert.ToInt32(e.Item.ItemIndex);
		dataSet.Tables\[0\].Rows\[row\].Delete();
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		XmlDataGrid.EditItemIndex = -1;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	protected void DEDR_Add(object sender, EventArgs e)
	{
		DataSet dataSet = LoadWebs();
		DataRow newRow;
		newRow = dataSet.Tables\[0\].NewRow(); 
		newRow\["Responsible"\] = "";
		newRow\["Name"\] = "";
		newRow\["LastName"\] = "";
		newRow\["Email"\] = "";
		newRow\["Company"\] = "";
		newRow\["Contact"\] = "";
		dataSet.Tables\[0\].Rows.InsertAt(newRow,0);  //ändra för var informuläret ska hamna, nu hamnar det högst upp i tabellen
		dataSet.WriteXml(Server.MapPath("webs.xml"));
		Session\["Webs"\] = null;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
		Session\["Webs"\] = null;
		XmlDataGrid.EditItemIndex = 0;//WebData.Items.Count - 1;
		XmlDataGrid.DataSource = LoadWebs();
		XmlDataGrid.DataBind();
	}

	\#region Web Form Designer generated code
	override protected void OnInit(EventArgs e)
	{
		//
		// CODEGEN: This call is required by the ASP.NET Web Form Designer.
		//
		InitializeComponent();
		base.OnInit(e);
	}
	
	/// \<summary\>
	/// Required method for Designer support - do not modify
	/// the contents of this method with the code editor.
	/// \</summary\>
	private void InitializeComponent()
	{    
		this.XmlDataGrid.SortCommand += new System.Web.UI.WebControls.DataGridSortCommandEventHandler(this.XmlDataGrid_SortCommand);
		this.Load += new System.EventHandler(this.Page_Load);

	}
	\#endregion

	protected void XmlDataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e)
	{
		XmlDataGrid.CurrentPageIndex = 0;
		SortField = e.SortExpression;	//get the requested sorting field name and set it to SortField
		BindGrid();
	}

	protected DataSet LoadWebs()
	{
		string sourceXml = Server.MapPath("webs.xml");
		if (!(File.Exists(sourceXml)))
		{
			return null;
		}
		DataSet cachedDataSet = (DataSet)Session\["Webs"\];
		if (!(cachedDataSet == null))
		{
			return cachedDataSet;
		}
		DataSet dataSet = new DataSet();
		try
		{ 
			dataSet.ReadXml(sourceXml);
			Session\["Webs"\] = dataSet;
		}
		catch (Exception e)
		{
			ErrorMessage.Text = e.Message;
			dataSet = null;
		}
		return dataSet;
	}

}

}

Medlem sedan apr. 20012 266 inlägg
#14

Slog ihop alla dina del trådar :)

Nu till svaret på din fråga.

...
<asp:TemplateColumn SortExpression="XmlDataGrid_SortCommand" HeaderText="Förnamn"> 
<ItemTemplate> 
...

SortExpression visar vilken kolumn den ska sortera efter du verkar försöka anropa din funktion där vilket blir fel.

Medlem sedan mars 20023 561 inlägg
#15

En liten parantes:

wwwstekaren: Använd gärna [k o d]-taggarna när du postar kod.

Medlem sedan apr. 2003234 inlägg
#16

Får samma fel ändå

Medlem sedan apr. 2003234 inlägg
#17

Cannot find column XmlDataGrid_SortCommand.

Medlem sedan apr. 2003234 inlägg
#18

nu funkar det

<asp:TemplateColumn SortExpression="XmlDataGrid_SortCommand" HeaderText="Förnamn">
<ItemTemplate>

På SortExpression ska det stå vad det heter ex Name, lastName mm Så nu funkar det

286 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
159 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)