Jag har en xml fil som skrivs ut i en dropdownlist i en datagrid. Den skriver ut ansvariga, men jag vill bara att den ska skriva ut den ansvariga en gång. Nu skriver den ut alla ex som heter Nisse nilsson, ska man loopa igenom listan och bara skriva ut ett Namne? De andra namnen ska också skrivas ut men bara en nisse nilson inte 10 st
XML fil i en dropdownlist
5 svar · 278 visningar · startad av wwwstekaren
Här kommer lite hjälp för att förstå vad jag menar, denna funktionen gör så att jag får ut min xml fil i en dropdownlist i en datagrid.
private void XmlDataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Header)
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("webs.xml"));
System.Web.UI.WebControls.DropDownList dropdown = (System.Web.UI.WebControls.DropDownList) e.Item.Cells[0].FindControl("dropdownlistRe");
dropdown.DataSource = ds.Tables[0];
dropdown.DataTextField = "Responsible"; //hämtar rätt nod från xmlfilen.
dropdown.DataBind();
}
}
Nu skriver den ut alla och det innebär att en person som finns flera gånger i xml filen under "Responsible" kommer att skrivas ut flera gånger jag vill att den bara ska skrivas ut en gång i dropdownlistan, hur gör jag detta, loop if satts eller? Snälla hjälp mig
Ett förslag är att du i en whileloop addar ett namn i taget i en arraylist och för varje nytt namn så kollar du FÖRST om det namnet redan finns i arraylisten, om inte så addar du namnet. Så kör du på tills du har kört igenom alla namn. Därefter fyller du din dropdownlista med din arraylist.
hur kodar jag detta? Är nybörjare på c# finns det något expemel på nätet eller vill du hjälpa mig:)?
Du kan göra som Network skrev eller så kan du loopa med itemsarna i dropdownen. Logiken bakom koden blir ungefär densamma. (skrev bara den från dropdownen eftersom jag slipper skapa arraylisten osv..)
Absolut inte prövad kod..skriver den bara rakt uppochner
//loopar med alla items..dvs 'Responsible'
for(int i=0;i<dropdown.Items.Count;i++){
if(!dropdown.Items[i].Visible){
continue; //vi behöver inte kontrollera de vi redan satt att vi inte ska visa
}
//loopar med de som kommer efter den Responsible vi tittar på
for(int j=i+1;<dropdown.Items.Count;j++){
if(dropdown.Items[i].Value == dropdown.Items[j].Value){ //om de heter samma
dropdown.Items[j].Visible = false; //vi visar inte detta itemet
}
}
}
Nått i den stilen..
Tänk bara på att det kan finnas två som heter Snorre Snorresson :)
Så här gjorde jag:)
private void XmlDataGrid_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType == System.Web.UI.WebControls.ListItemType.Header)
{
DataSet ds = new DataSet();
ds.ReadXml(Server.MapPath("webs.xml"));
System.Web.UI.WebControls.DropDownList dropdown = (System.Web.UI.WebControls.DropDownList) e.Item.Cells[0].FindControl("dropdownlistRe");
dropdown.DataSource = ds.Tables[0];
dropdown.DataValueField = "Responsible";
dropdown.DataBind();
for(int i=0;i < dropdown.Items.Count; i++)
{
for(int j = 0; j < dropdown.Items.Count; j++)
{
if(j != i && dropdown.Items[j].Text == dropdown.Items[i].Text)
dropdown.Items.RemoveAt(j);
}
}
}