Avatar billede sidenius Nybegynder
15. september 2008 - 12:01 Der er 19 kommentarer og
1 løsning

hent af kolonne fra Excel 2007 ind i listbox

Hej

jeg skal have hentet 2 kolonner fra Excel ind i min listbox. Den første er en "Titel" på en film og kolonnen ved siden af hedder "Antal Min" som jeg gerne skulle have tilsvarende ind i min listbox ved siden af Titel. Kan det lade sig gøre at opstille de 2 kollonner ( som de står i excel ) i en listbox ??
Avatar billede aaberg Nybegynder
15. september 2008 - 12:05 #1
Jeg ville nok bruge en ListView med View propertien sat til "Details" og FullRowSelect propertien sat til true. Det giver meget præcist hvad du har brug for, hvis jeg har forstået dig rigtigt.

Skal du have hjælp til at hente data ud fra Excel også, eller?
Avatar billede sidenius Nybegynder
15. september 2008 - 12:20 #2
ja tak meget gerne. Jeg ved ikke helt præcist hvor jeg skal skrive ListView ind henne i koden og hvordan det skal stå .
Avatar billede aaberg Nybegynder
15. september 2008 - 12:34 #3
Jeg laver et lille test-projekt til dig. Bruger du Visual Studio 2008?
Avatar billede sidenius Nybegynder
15. september 2008 - 12:37 #4
nemlig ja , VS studio 2008 express
Avatar billede aaberg Nybegynder
15. september 2008 - 13:21 #5
Her er et eksempel:

http://www.aaberg.cc/ExcelListViewTest.zip

Bare spørg hvis der er noget du er i tvivl om.
Avatar billede sidenius Nybegynder
17. september 2008 - 12:45 #6
hej aaberg

har kigget eksemplet igennem og har et par spørgsmål til det.

"Titel" og "Antal Min" som står i kolonnerne på form'en, hvordan får jeg frem på min egen form, er de tunder properties jeg skal synliggøre dem ?

Jeg vedhæfter lige min egen kode så du kan se det jeg har:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Filmliste
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
           
        }

       

        private void button2_Click(object sender, EventArgs e)
        {

        }

        private void button3_Click(object sender, EventArgs e)
        {

        }

        private void button4_Click(object sender, EventArgs e)
        {

        }

        private void button5_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button6_Click(object sender, EventArgs e)
        {

        }
    }
}

button 1-2-3-4 og 5 er knapper jeg har navngivet "Titel", "Danske", "Børnefilm",  Boxset" og "Nyeste".  Textbox1 er et søgefelt , hvor jeg bruger button6 som "Søg"-knap til at søge blandt titelerne i hele listen.
Hvis man trykker på button1 ( "Titel" ) , skal listen vise alle internationale film i den tilsvarende kolonne i Excel arket , med "Antal min" ved siden af.

Håber det er til at forstå
Avatar billede sidenius Nybegynder
17. september 2008 - 12:47 #7
Glemte lige at tilføje fl.g kode:

        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }

som står under private void button6_Click koden
Avatar billede aaberg Nybegynder
17. september 2008 - 15:09 #8
For at vise kolonner i et ListView, skal du først sætte View propertien til "Details". Dette gør du under Properties i designeren. Derefter kan du tilføje kolonner i Columns propertien.

Prøv at se om du kan få det til at virke ud fra de informationer du har nu. Hvis du har nogle flere spørgsmål, så bare spørg. Jeg kan eventuelt modificere lidt på eksemplet, så det ligner det du skal bruge lidt mere. Jeg har dog ikke tid til at gøre dette før i aften, eventuelt i morgen aften.
Avatar billede sidenius Nybegynder
17. september 2008 - 15:14 #9
Det er helt i orden hvis du først har tid i aften eller morgen aften. Og vil meget gerne hvis du ville modificere den til at ligne noget af det jeg skal bruge. Kigger lige selv på det imellemtiden så og prøver at få vist kolonnerne på form'en.
På Forhånd tak
Avatar billede sidenius Nybegynder
18. september 2008 - 14:39 #10
Hej aaberg , har nu fået tilføjet koden til knapperne så denne del virker rigtig godt nu. Nu er det bare "Søg"-knappen ( button6 ) jeg er strandet på. I  textbox1 skal man kunne skrive noget at titelen og så trykke på "Søg"-knappen ( button6 ) hvorefter den så skal fremvise resultatet i Listview. Hvordan gøres dette lige ?

tror efterhånden jeg er tæt ved "målet" nu.
Avatar billede aaberg Nybegynder
18. september 2008 - 15:08 #11
Det er godt at høre. :-)

Kan du poste din kode, så er det lidt nemmere at foreslå en løsning der passer ind til det du allerede har skrevet.
Avatar billede sidenius Nybegynder
18. september 2008 - 15:45 #12
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;

namespace Filmliste
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
                 


                this.listView1.Items.Clear();

                string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
                OleDbConnection connection = new OleDbConnection(connectionString);

                OleDbCommand command = connection.CreateCommand();

                command.CommandText = "select * from [Titel$]";

                try
                {
                    connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        string titel = (string)reader["Titel"];
                        int antMin = Convert.ToInt32(reader["Antal Min"]);
                        ListViewItem listItem = new ListViewItem(titel);
                        listItem.SubItems.Add(antMin.ToString());
                        this.listView1.Items.Add(listItem);
                    }
                }

                finally
                {
                    connection.Close();
                }
                 
        }

       

        private void button2_Click(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();

                string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
                OleDbConnection connection = new OleDbConnection(connectionString);

                OleDbCommand command = connection.CreateCommand();

                command.CommandText = "select * from [Dansk$]";

                try
                {
                    connection.Open();
                    OleDbDataReader reader = command.ExecuteReader();

                    while (reader.Read())
                    {
                        string titel = (string)reader["Titel"];
                        int antMin = Convert.ToInt32(reader["Antal Min"]);
                        ListViewItem listItem = new ListViewItem(titel);
                        listItem.SubItems.Add(antMin.ToString());
                        this.listView1.Items.Add(listItem);
                    }
                }

                finally
                {
                    connection.Close();
                }

               
        }

        private void button3_Click(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();

            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
            OleDbConnection connection = new OleDbConnection(connectionString);

            OleDbCommand command = connection.CreateCommand();

            command.CommandText = "select * from [Børnefilm$]";

            try
            {
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    string titel = (string)reader["Titel"];
                    int antMin = Convert.ToInt32(reader["Antal Min"]);
                    ListViewItem listItem = new ListViewItem(titel);
                    listItem.SubItems.Add(antMin.ToString());
                    this.listView1.Items.Add(listItem);
                }
            }

            finally
            {
                connection.Close();
            }

        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();

            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
            OleDbConnection connection = new OleDbConnection(connectionString);

            OleDbCommand command = connection.CreateCommand();

            command.CommandText = "select * from [BoxSet$]";

            try
            {
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    string titel = (string)reader["Titel"];
                    int antMin = Convert.ToInt32(reader["Antal Min"]);
                    ListViewItem listItem = new ListViewItem(titel);
                    listItem.SubItems.Add(antMin.ToString());
                    this.listView1.Items.Add(listItem);
                }
            }

            finally
            {
                connection.Close();
            }

        }

        private void button5_Click(object sender, EventArgs e)
        {
            this.listView1.Items.Clear();

            string connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
            OleDbConnection connection = new OleDbConnection(connectionString);

            OleDbCommand command = connection.CreateCommand();

            command.CommandText = "select * from [Nyeste$]";

            try
            {
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    string titel = (string)reader["Titel"];
                    int antMin = Convert.ToInt32(reader["Antal Min"]);
                    ListViewItem listItem = new ListViewItem(titel);
                    listItem.SubItems.Add(antMin.ToString());
                    this.listView1.Items.Add(listItem);
                }
            }

            finally
            {
                connection.Close();
            }

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void button6_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
            OleDbCommand command = connection.CreateCommand();

            command.CommandText = "select*from [Titel$] where titel like@searchString";
            command.Parameters.Add(new OleDbParameter("@searchString", "%" + this.textBox1.Text + "%"));



                       
        }

               
        private void listView1_SelectedIndexChanged(object sender, EventArgs e)
        {

        }
    }
}

Har prøvet noget under button6 , men der gik desværre lidt kage i det :)
Avatar billede aaberg Nybegynder
18. september 2008 - 17:21 #13
Det er ikke dumt det du har startet op under button6. Der mangler dog nogle mellemrumstegn i SQL sætningen.

Prøv at skriv:

select * from [Titel$] where titel like @searchString

Ellers er det det sædvanlige med at åbne forbindelsen og loope igennem med while(reader.Read())
Avatar billede sidenius Nybegynder
19. september 2008 - 14:52 #14
jeg har fået mellemrum i SQL sætningen nu, men under while(reader.Read()) ved jeg ikke hva jeg skal skrive ?
Avatar billede aaberg Nybegynder
19. september 2008 - 14:59 #15
Hvis jeg ikke har forstået det helt forkert, skal du vel skrive det samme, som i alle de andre metoder.

        private void button6_Click(object sender, EventArgs e)
        {
            OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Documents and Settings\\Lars\\Dokumenter\\Filmliste.xlsx;Extended Properties =\"Excel 12.0 Xml;HDR=YES\"");
            OleDbCommand command = connection.CreateCommand();

            command.CommandText = "select * from [Titel$] where titel like @searchString";
            command.Parameters.Add(new OleDbParameter("@searchString", "%" + this.textBox1.Text + "%"));

            try
            {
                connection.Open();
                OleDbDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    string titel = (string)reader["Titel"];
                    int antMin = Convert.ToInt32(reader["Antal Min"]);
                    ListViewItem listItem = new ListViewItem(titel);
                    listItem.SubItems.Add(antMin.ToString());
                    this.listView1.Items.Add(listItem);
                }
            }

            finally
            {
                connection.Close();
            }
                     
        }
Avatar billede sidenius Nybegynder
19. september 2008 - 15:06 #16
Jeg har på en eller anden måde fået hul igennem til søg-funktionen nu, men hvis jeg skal søge fra en anden tabel en Titel-tabellen, skal jeg så tilføje command.CommandText = "select * from [Dansk$] f.eks nedenunder den først SQL linie ??
Avatar billede aaberg Nybegynder
19. september 2008 - 15:31 #17
Hvis du skal søge fra en anden tabel, skal du skifte SQL sætningen ud. F.eks.
select * from [Dansk$] where Titel like @searchString

Hvis du skal søge i flere tabeller på en gang, kan du bruge en union

select *
from [Titel$]
where Titel like @searchString
union select *
from [Dansk$]
where Titel like @searchString

osv.

I stedet for at gøre det på den måde, kan du jo overveje at have en tabel som indeholder alle film, som har en ekstra kolonne som hedder "kategori". Så bliver sql sætningen

select *
from [AlleFilm$]
where Titel like @searchString

Så kan du under knappen "Dansk" skrive

select *
from [AlleFilm$]
where Kategori = 'Dansk'

osv.
Avatar billede sidenius Nybegynder
19. september 2008 - 15:50 #18
jeg har brugt den med union og det ser bare super godt ud. Tusind tak aaberg, så vil jeg simpelthen tilføje alle film til listen. Så bliver sidste hurdle egentlig bare hvordan jeg kan få det her "program" distribueret ud til venner og familie eller om man kan lave en smart install-fil som pakker program + excel-fil ud på deres computer så de selv kan køre programmet der.
Avatar billede aaberg Nybegynder
19. september 2008 - 18:28 #19
Man kan lave en install fil, men desværre ikke med Expess versionen. Så bliver man nød til at have den fulde version. Ellers bliver du nød til at programmere install programmet selv.

Det nemmeste er nok bare at zippe filerne, og sende dem til vender på e-mail, eller kopiere det på en cd.
Avatar billede sidenius Nybegynder
19. september 2008 - 21:07 #20
tak for det aaberg, det var kanon hjælp, jeg prøver at zippe filerne i stedet for :). Ellers må jeg se om der ligger et eksempel på hvordan man programmerer install-programmet et sted engang .
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester