Frågan 24 apr. 2003 08:51 #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>
NETwork Medlem sedan juni 2001 1 732 inlägg 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örnamn";
dt.Columns\[2\].ColumnName = "Efternamn";
dt.Columns\[3\].ColumnName = "E-post";
dt.Columns\[4\].ColumnName = "Fö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
}
}
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ö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\>
\</body\>
</HTML>
får fel i aspx.cs filen
No overload for method 'BindGrid' takes '0' arguments
NETwork Medlem sedan juni 2001 1 732 inlägg 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å...
hur ska jag skriva här då?
protected void Page_Load(Object src, EventArgs e)
{
if(!IsPostBack)
{
XmlDataGrid.DataSource = LoadWebs();
XmlDataGrid.DataBind();
BindGrid();
}
}
NETwork Medlem sedan juni 2001 1 732 inlägg 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...
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
R renholm Medlem sedan apr. 2001 2 266 inlägg vad försöker du göra? finns bra exempel på hur man använder en datagrid på http://samples.gotdotnet.com/quickstart/.
NETwork Medlem sedan juni 2001 1 732 inlägg 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! :)
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>
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;
}
}
}
R renholm Medlem sedan apr. 2001 2 266 inlägg 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.
J Josef Medlem sedan mars 2002 3 561 inlägg En liten parantes:
wwwstekaren: Använd gärna [k o d]-taggarna när du postar kod.
Cannot find column XmlDataGrid_SortCommand.
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