Hur räknar jag posterna med reader? Du kan tyvärr inte få ut antal rader i en DataReader, men du kan få ut antalet kolumner men det hjälper inte dig så mkt förstår jag. OK, jag har då ändrat till ds. Är Område ett värde som ligger i en kolumn, om så kan du använda dig av RowFilter. Nja jag får ett error, när jag skriver som du visar mig Hej. Se på min kod igen... Ok nu tror jag att jag fattar(lite) Hej. Hej MSL. Hej. Tack, nu finns det änteligen någonting att gå på.Räkna poster
<code>
reader.Read();
int räkna = count(reader["Område"].ToString());
</code>
fungerar ju inte, men hur får jag reda på hur många poster som finns i Område?Sv: Räkna poster
Ett sätt att göra det på som inte är bra om man tänker på prestanda, det är att loopa genom alla rader i readern och ha en variabel som du adderar med 1.
Ett annat sätt är att du gör en extra SQL fråga som gör en COUNT på det du vill ha ut och använder dig då av ExecuteScalar för att utföra frågan, och för att få en bra prestanda.
En DataReader är tillför att enbart lista alla data den har från början till slut.
Vill du ha reda på antal rader så får du använda dig av ett DataSet.
/Fredirk NSv: Räkna poster
Jag kan ju enkelt få fram alla posterna med:
<code>
int rader = ds1.Tables["frånChart"].Rows.Count;//denna visar 11 poster
</code>
Men det är av vikt att jag kan räkna område...
<code>
int iOmråde = ds1.Tables["frånChart"].Rows[?]["Område"].ToString();
</code>
Hur bör den se ut?Sv: Räkna poster
Tex:
<code>
DataView myView = ds1.Tables["frånChart"].DefaultView;
myView.RowFilter = "namnetpådinkolumn = 'Område'"; //namnetpådinkolumn = skriv in namnet på din lolumn som innehåller värdet Område.
int rows = myView.Count;
</code>
/Fredrik NSv: Räkna poster
<code>
E:\C#\SawData\Saw\frmSAW.cs(750): Too many characters in character literal
</code>
Då har jag alltså skrivit:
<code>
DataView myView = ds1.Tables["frånChart"].DefaultView;
myView.RowFilter = 'Område';
int rows = myView.Count;
MessageBox.Show(rows.ToString());
</code>
Jag ville ha med MessageBoxen, för att kontrolera resultaten.
[REDIGERAT]
När jag ändrar till:
<code>
myView.RowFilter = ("Område").ToString();
</code>
då fungerade lite men jag fick följande error:
'Additional Information: Filter expression 'Område' does not evaluate to a Boolen term'
Det blir ju ganska så galet??Sv: Räkna poster
<code>
myView.RowFilter = 'Område';
</code>
skall vara:
<code>
myView.RowFilter = "Area = 'Område'"; OBS! AREA är det kolumnnamn Område ligger i.
</code>
Byt ut Area mot det kollumn namn du skall ha. Om ditt kolumnnamn är Område så behöver du ange det värde du söker efter. Ex om du har en Categori kolumn med
categorin Hästar så skriver du:
<code>
myView.RowFilter = "Category = 'Hästar';
</code>
//Johan NSv: Räkna poster
Där skrev jag att du måste ange ditt kolumnnamn som innehåller värdet områden.
Tex vi säger att kolummen som har värdet områden heter area, då skriver du tex:
<code>
DataView myView = ds1.Tables["frånChart"].DefaultView;
myView.RowFilter = "Area = 'Område'"; //<--------
int rows = myView.Count;
</code>
För du vill väl få ut de antal rader där en viss kolumn har värdet områden??
/Fredrik NSv: Räkna poster
<code>
DataView myView = ds1.Tables["frånChart"].DefaultView;
myView.RowFilter = "Område = 'Sverige'";
int rows = myView.Count;
</code>
Blir ju ett resultat...
Jag vill alltså räkna hur många poster Område har.(jag vet att just nu är det tre)
(jag vill alltså INTE ha reda på hur många gånger 'Sverige' förekommer, utan hur MÅNGA olika områden det finns)
Är detta då rätt sätt att räkna på?Sv: Räkna poster
Skall du använda resten av data till något? alltså den du får ut via din fråga? eller
har du skapat frågan endast för att få fram x antal poster som har område?
Om så är fallet så rekomenderar jag executescalar och sedan en fråga med count, där du då frågat efter alla poster som har ett område.
Om du däremot vill återanvända en massa data ur din fråga, så kan man göra på många olika sätt, frågan är ju mer en design lösning.
Ex så kan du använda en reader gå genom hela readern, spara poster i en collection och räknar undertiden ut de värden du vill ha, när det är klart använder du de collections du skapade. Är du med?
typ:
<code>
int antalOmråden;
ArrayList områden = new ArrayList();
while(myReader.Read())
{
if(myReader("Områden") != "" || myReader("Område") != null)
antalOmråden ++
områden.Add(myReader("områden").ToString());
}
... (stänger connections m.m.)
foreach(string x in områden)
Console.WrtieLine(x);
</code>
Eller så kör du DataSet och gör sökningar i den.
Fördelen med DataSet är att du kan hoppa runt i den så mkt du vill, det kan du inte i en DataReader då den endast är forward- och readonly.
Som sagt det finns en hel del lösningar på ditt problem, frågan är bara hur du vill använda datan.
//Johan NSv: Räkna poster
Först, jo jag skall använda resultatet. Jag har tidigare ställt frågan om MSChart, men fick ingen hjälp. Nu försöker jag iallafall på detta sättet.
Jag har alltså ändrat ifrån reader till DataSet.
Det första som jag måste ha tag på är antal områden, för att kunna använda som RowCount.
När det gäller ColumnCount, så är det redan klart:
<code>
int rader = ds1.Tables["frånChart"].Rows.Count;
</code>
Jag har get mig den på att på något sätt lösa detta problem, jag vill så gärna ha med en MSChart i mitt project.Sv: Räkna poster
Här kommer lite kodexempl med Mschart om det skulle hjälpa dig något?
Dock skriver i Visual Basic, så du får omvandla koden till C# själv.
Följande exempel visar en 3 dimensionel chart med 8 kolumner och rader med data.
Med satt Legend parameter.
<code>
Private Sub Command1_Click()
With MSChart1
' Displays a 3d chart with 8 columns and 8 rows
' data.
.ChartType = VtChChartType3dBar
.ColumnCount = 8
.RowCount = 8
For column = 1 To 8
For row = 1 To 8
.Column = column
.Row = row
.Data = row * 10
Next row
Next column
' Use the chart as the backdrop of the legend.
.ShowLegend = True
.SelectPart VtChPartTypePlot, index1, index2, _
index3, index4
.EditCopy
.SelectPart VtChPartTypeLegend, index1, _
index2, index3, index4
.EditPaste
End With
End Sub
</code>
Du får testa dig fram lite hur du vill ha ditt resultat.
//Johan NSv: Räkna poster
En fråga:
<code>
.SelectPart VtChPartTypePlot, index1, index2, _
index3, index4
.EditCopy
.SelectPart VtChPartTypeLegend, index1, _
index2, index3, index4
</code>
index1 osv vad är det för värde?
Series?