webForumDet fria alternativet

Få ett värde engång men som finns flera gånger

.NET

35 svar · 785 visningar · startad av wwwstekaren

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

jag har en lista som ska skrivas ut. Den innehåller olika personer som är ansvariga för olika kunder. Nu när jag skriver ut så kan det förekomma att Nisse Nilsson skrivs ut två gånger hur gör jag så att en person bara skrivs ut en gång. Denna koden har jag idag för att skriva ut detta i en tabell

private void Page_Load(object sender, System.EventArgs e)
		{
			DataSet ds = LoadWebs();
		
			DataView custDV = new DataView(ds.Tables[0], 
					null,
					"Responsible",
					DataViewRowState.CurrentRows);
		
			
			ContactBox.DataSource = ResponsibleBox.DataSource = custDV; 
			ResponsibleBox.DataValueField = "Responsible";
			ContactBox.DataValueField = "Contact";
			ResponsibleBox.DataBind(); ContactBox.DataBind();
		}
Medlem sedan apr. 20012 266 inlägg
#2

Troligen kommer du behöva loopa igenom din dataview och sedan med hjälp av Items.Conatains avgöra om värdet redan finns.

Medlem sedan mars 20007 896 inlägg
#3

Om du inte hämtar informationen från en databas, då kan du sortera ut redan i SQL-frågan med nyckelordet DISTINCT.

Medlem sedan apr. 2003234 inlägg
#4

Hur då:)? Visa mig lite kod

Medlem sedan mars 20007 896 inlägg
#5
SELECT DISTINCT( fld ) FROM tbl
Medlem sedan apr. 2003234 inlägg
#6

Men förstår du vad jag vill ha ut, jag tror man bara kan loopa igenom det så här typ:)

i pseudokod: 

föregående person = "";

for i=0 to sista posten
{
  if (föregående person!=nuvarande post)
    visa i listan;
  föregående person = nuvarande post;
}
Medlem sedan maj 20012 812 inlägg
#7

Om du hämtar din data från en databas, med SELECT så kan du använda dig av DISTINCT för att få ut vad du vill ha.

Om du med SELECT name FROM table får följande resultat.

Nisse
Nisse
Erik
Nisse
Johan
Erik

Så får du med SELECT DISTINCT name FROM table

Nisse
Erik
Johan

Om du gör som du vill i din pseudokod, så måste namnen ligga i rätt ordning, du skulle inte få ut vad du vill om du hade haft en lista som min översta, du hade fått ut.

Nisse
Erik
Nisse
Johan
Erik

- M

Medlem sedan apr. 2003234 inlägg
#8

Jag hämtar från en xml fil:)

Medlem sedan apr. 20012 266 inlägg
#9

Här har du ett exempel med en DropDownList

private void Page_Load(object sender, System.EventArgs e)
{
DataSet ds = LoadWebs();

foreach(DataRow row in ds.Tables[0].Rows)
{
    ListItem item = new ListItem(row["test"], row["value"]);
    if (!ddl.Item.Contains(item))
    {
        ddl.Items.Add(item);
    }
}
Medlem sedan apr. 2003234 inlägg
#10

ddl vad är det?

Medlem sedan apr. 20012 266 inlägg
#11

ddl = DropDownList som jag skrev ovan.

Denna koden har jag idag för att skriva ut detta i en tabell

Vad försökre du binda detta till egentligen?

Medlem sedan apr. 2003234 inlägg
#12

detta funkar inte varför?

private void Page_Load(object sender, System.EventArgs e)
		{
			DataSet ds = LoadWebs();

			foreach(DataRow row in ds.Tables[0].Rows)
			{		
				DataView custDV = new DataView(ds.Tables[0], 
					null,"Responsible",DataViewRowState.CurrentRows);
				if (!ContactBox.Items.Contains(custDV))
				{
					ContactBox.Items.Add(custDV);

					ContactBox.DataSource = ResponsibleBox.DataSource = custDV; 
					ResponsibleBox.DataValueField = "Responsible";
					ContactBox.DataValueField = "Contact";
					ResponsibleBox.DataBind(); ContactBox.DataBind();
				}
			}

		}
Medlem sedan apr. 2003234 inlägg
#13

det gör jag med min också

Medlem sedan apr. 20012 266 inlägg
#14

anledningen till att det inte funkar är att du har lagt in massa annan kod, är det två boxar du ska binda?

Medlem sedan apr. 2003234 inlägg
#15

yes, jag skickar med min aspx kod

<%@ Page language="c#" Codebehind="rapport.aspx.cs" AutoEventWireup="false" Inherits="xml_dropdownlist.rapport" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
	<HEAD>
		<title>rapport</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 { }
	.background { BACKGROUND-IMAGE: url(bak.gif); BACKGROUND-REPEAT: no-repeat }
	.button { }
		</style>
	</HEAD>
	<body bgColor="#ffffff">
		<form id="rapport" method="post" runat="server">
			<table>
				<tr>
					<td><asp:checkboxlist id="ResponsibleBox" Runat="server" EnableViewState="True"></asp:checkboxlist></td>
					<td>&nbsp;</td>
					<td><asp:checkboxlist id="ContactBox" Runat="server" EnableViewState="True"></asp:checkboxlist></td>
				</tr>
				<tr>
					<td align="right" colSpan="3"><asp:button id="ResultButton" Runat="server" Text="Generera epostadresser"></asp:button></td>
				</tr>
				<tr>
					<td align="middle" colSpan="3"><asp:textbox id="Emails" Runat="server" Rows="10" Columns="80" TextMode="MultiLine"></asp:textbox></td>
				</tr>
			</table>
		</form>
	</body>
</HTML>

vill nu att de bara skriver ut ett namn en gång. Just nu skrivs ett namn som finnas två gånger i xml filen ut flera gånger.

Medlem sedan apr. 20012 266 inlägg
#16

Ok, då blir det så här:

DataSet ds = LoadWebs();

foreach(DataRow row in ds.Tables[0].Rows)
{
    ListItem item = new ListItem(row["Responsible"], row["Responsible"]);
    if (!ResponsibleBox.Item.Contains(item))
    {
        ResponsibleBox.Items.Add(item);
        ContactBox.Items.Add(item);
    }
}
Medlem sedan apr. 2003234 inlägg
#17

Tackar nu funkar det tack så jätte mycket för hjälpen:)

Medlem sedan apr. 2003234 inlägg
#18

En liten sak bara nu skrivs Responsible ut i båda tabellerna, den andra ska skriva ut en del andra saker, hur gör jag lättast detta. Uppskattar din hjälp:) Är nybörjare på detta

Medlem sedan apr. 20012 266 inlägg
#19

Så här möjligen

DataSet ds = LoadWebs();

foreach(DataRow row in ds.Tables[0].Rows)
{
    ListItem item = new ListItem(row["Responsible"], row["Responsible"]);
    if (!ResponsibleBox.Item.Contains(item))
    {
        ResponsibleBox.Items.Add(item);
    }

    item = new ListItem(row["Contact"], row["Contact"]);
    if (!ContactBox.Item.Contains(item))
    {
        ContactBox.Items.Add(item);
    }
}
Medlem sedan apr. 2003234 inlägg
#20

Fick ändra om lite i koden nu funkar det:) Du ska ha ett stort tack:)

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