Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 19:59:44 - Benni Svensson, i forum c# (c-sharp), Tråden har 15 Kommentarer och lästs av 1053 personer

Hej, jag hoppas på lite hjälp eftersonjag har kört fast och jag har inte kunnat hitta någonting via nätet.
Jag har en listview. Headern innehåller två item(heter det så när det gäller headern?)
Sjäva listviewn kan innehålla ganska många item.
I sin enklaste form så kan det se ut så här
<info>
Akord ifrån F Akord till C
F C
A# F
C7 G7
</info>
Jag har försökt att "snickra lite"
<b>För att spara</b>
<code>
int filInt = Filnamn.LastIndexOf("\\") + 1;
Filnamn = Filnamn.Substring(filInt).Replace(".rtf", "");
string path = Application.StartupPath + @"\Sparade_filer\Lv_" + Filnamn + ".txt";

StringBuilder listViewContent = new StringBuilder();
foreach (ColumnHeader column in this.listView1.Columns)
{
listViewContent.Append(column.Text);
listViewContent.Append(Environment.NewLine);
}

listViewContent.Append(Environment.NewLine);
foreach (ListViewItem item in this.listView1.Items)
{
listViewContent.Append(item.Text);
listViewContent.Append(Environment.NewLine);
}
StreamWriter tw = new StreamWriter(path);
tw.WriteLine(listViewContent.ToString());
tw.Close();
</code
Denna koden gör det mästa, men jag får inte med C F G7
<b>För att oppna till listViewn</b>
<code>
int filInt = Filnamn.LastIndexOf("\\") + 1;
Filnamn = Filnamn.Substring(filInt).Replace(".rtf", "");
string path = Application.StartupPath + @"\Sparade_filer\Lv_" + Filnamn + ".txt";
char[] delimiterChars = { ' ' };//detta blir inte bra då allt är på ny rad

StreamReader streamReader = new StreamReader(path);
string text = streamReader.ReadToEnd();
String[] sText = text.Split(delimiterChars);
for (int i = 0; i < sText.Count(); i++)
{
if (sText[i] == "Akord *")
{
listView1.Columns.Add(sText[i]);
}
else
{
listView1.Items.Add(sText[i]);
}

}
streamReader.Close();
</code>
Här stämmer ingenting. Jag får ingen header och resten lägger sig fel.
Jag tror personligen att det hadde varit bättre med en xml-fil men jag kan inte det, och jag hittar
ingenting som liknar det som jag vill ha.


Svara

Sv: Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 20:42:08 - André Claesson

Det är flera saker som inte stämmer, men du kan börja med att splitta med newline, eftersom det är newline du använder när du sparar.

string[] sText = text.Split(Environment.NewLine.ToCharArray());


Sen måste du fundera på hur filen egentligen ska se ut, för att man på ett enkelt sätt ska kunna läsa in den igen.


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 21:28:08 - Benni Svensson

Hej.
Först, jag har nu lyckats med att spara innehållet på dt sättet som jag ville:
<code>
int filInt = Filnamn.LastIndexOf("\\") + 1;
Filnamn = Filnamn.Substring(filInt).Replace(".rtf", "");
string path = Application.StartupPath + @"\Sparade_filer\Lv_" + Filnamn + ".txt";
StreamWriter tw = new StreamWriter(path);

tw.WriteLine(listView1.Columns[0].Text + "\t" + listView1.Columns[1].Text);
for (int i = 0; i < this.listView1.Items.Count; i++)
{
tw.WriteLine(listView1.Items[i].SubItems[0].Text + "\t" + listView1.Items[i].SubItems[1].Text);
}
tw.Flush();
tw.Close();
</code>
Från min synvinkel så ser den helt perfekt ut.
Sen är det som du säger ladda listViewn igen...
Jag hittade faktiskt en sak.
<code>
StreamReader m_streamReader = new StreamReader(path);
m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin);
string strLine = m_streamReader.ReadLine();
int nStart = 0;
int count = 0;
while (strLine != null)
{
int nPos1 = strLine.IndexOf("\t", nStart);
string str1 = strLine.Substring(0, nPos1); // get first column string

nStart = nPos1 + 1;
int nPos2 = strLine.IndexOf("\t", nStart);
string str2 = strLine.Substring(nStart, nPos2 - nStart); // get second column string
nStart = nPos2 + 1;

listView1.InsertItem(count, str1, 0, new string[] { str2}); // Add the row to the ListView

count++; // increment row
nStart = 0; // reset
strLine = m_streamReader.ReadLine(); // get next line from the stream

}
</code>
.. men det lyckas inte, listViewn har ju inte listView1.InsertItem, och jag kan inte hitta någonting som
ersätter den.
Vad tror du?


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 21:28:15 - Benni Svensson

fel


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 21:29:02 - Benni Svensson

fel


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 21:29:49 - Benni Svensson

fel


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 21:48:18 - Benni Svensson

fel


Svara

Sv: Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 22:00:21 - André Claesson

Hej igen

Jag har skrivit ett helt exempel på hur jag hade löst det (testat och fungerar):

        private void Save()
        {
            string headers = "";
            string items = "";

            foreach (ColumnHeader c in listView1.Columns)
                headers += c.Text + '\t';

            headers = headers.TrimEnd('\t');
            headers += "\r\n";
            
            foreach (ListViewItem lvi in listView1.Items)
            {
                for (int i = 0; i < lvi.SubItems.Count; i++)
                    items += lvi.SubItems[i].Text + '\t';
                
                items = items.TrimEnd('\t');
                items += "\r\n";
            }

            File.WriteAllText(@"C:\test\save.txt", headers + items, Encoding.UTF8);
        }

        private void Load()
        {
            string[] filerows = File.ReadAllLines(@"C:\test\save.txt");

            string[] headers = filerows[0].Split('\t');
            foreach (string header in headers)
                listView1.Columns.Add(header);

            for (int i = 1; i < filerows.Length; i++)
            {
                string[] items = filerows[i].Split('\t');
                listView1.Items.Add(new ListViewItem(items));
            }
        }


På detta sätt sparas allt så att det även ser snyggt ut i filen, typ så här:
<code>
Akord ifrån F Akord till C
F C
A# F
C7 G7
</code>


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 22:18:30 - Benni Svensson

fel


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-10 22:51:47 - Benni Svensson

Först, någonting har gått galet med forumet, därav så blev det så många inlägg.
Sen, tack för att du försöker men jag har fått problem med öppna:
<code>
int filInt = Filnamn.LastIndexOf("\\") + 1;
Filnamn = Filnamn.Substring(filInt).Replace(".rtf", "");
string path = Application.StartupPath + @"\Sparade_filer\Lv_" + Filnamn + ".txt";


string[] filerows = File.ReadAllLines(path);
string[] headers = filerows[0].Split('\t');
foreach (string header in headers)
listView1.Columns.Add(header);

for (int i = 1; i < filerows.Length; i++)
{
string[] items = filerows[i].Split('\t');
listView1.Items.Add(new ListViewItem(items));
}
</code>
Problemen är:
Jag får inga headers. Med Messagebox så ser jag dem men de vill inte läggas till.
Jag får bara upp F A# C7 i en rad.
Vad tror du?


Svara

Sv: Spara och ladda innehållet ifrån en listView

Postades av 2009-09-11 06:22:46 - André Claesson

Du har inte satt ListView:n att visas i detaljläge, är vad jag tror.
Fixa i designern eller med kod: listView1.View = View.Details.


Svara

Sv:Spara och ladda innehållet ifrån en listView

Postades av 2009-09-11 09:30:10 - Benni Svensson

Hej och tack André.
Jag ändrade lite:
<code>
listView1.Columns.Add(header, 76, HorizontalAlignment.Left);
</code>
..och nu blev det helt perfekt.


Svara

Sv: Spara och ladda innehållet ifrån en listView

Postades av 2009-09-11 16:57:56 - André Claesson

Kul att det fungerade bra!
Jag förkortade exemplet lite till ovan. Räcker med en rad för att spara filen till disk.


Svara

Nyligen

  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak
  • 16:14 Vem anlitar man egentligen när tak
  • 16:13 Vem anlitar man egentligen när tak
  • 11:52 Noen erfaring med uttak hos Mostbe
  • 11:51 Noen erfaring med uttak hos Mostbe

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 635
27 958
271 741
630
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies