Avatar billede doomstone-dk- Nybegynder
15. maj 2008 - 17:21 Der er 5 kommentarer og
1 løsning

datagridview med combobox

Jeg har "lidt" problemer med en datagridview med en combobox i.

Jeg kan simpel hen ikke få data'en ud af den eller sætte et index/value i combobox'en.
Det er dog lykkes mig at lave selve combobox'en men den data i som der skal være.

En der kan forklare mig hvordan jeg f.eks. kan få data'en ud af
dataGridView1, row 0, collone 3 (som er en combobox).
Eller hvordan jeg kan sætte den?

Her er min kode so far!
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 Indexer;
using SeriesIdentifier;
using SerieInfo;
using System.IO;
using System.Threading;
using System.Collections;
using System.Data.SqlClient;

namespace Seriesindexer
{
    public partial class SelectImdb : Form
    {
        public SelectImdb()
        {
            InitializeComponent();
        }

        private DatabaseDataSetTableAdapters.FilesTableAdapter TAFile = new Seriesindexer.DatabaseDataSetTableAdapters.FilesTableAdapter();
        private DatabaseDataSetTableAdapters.FoldersTableAdapter TAFolder = new Seriesindexer.DatabaseDataSetTableAdapters.FoldersTableAdapter();

        SerieSearch Search = new SerieSearch();
        DataTable _DataTable;
        DataRow dr;

        private void SelectImdb_Load(object sender, EventArgs e)
        {

            DataTable Shows = Populate("SELECT DISTINCT serie  FROM  Files");
            for (int i = 0; i < Shows.Rows.Count && i <= 2; i++)
            {
                ResetDataTable();
                if (Shows.Rows[i]["serie"].ToString() != "")
                {
                    ArrayList Serie = Search.GetImdbSelect(Shows.Rows[i]["serie"].ToString());
                    foreach (string[] s in Serie)
                    {
                        dr = this._DataTable.NewRow();
                        dr["text"] = s[0];
                        dr["value"] = s[1];
                        this._DataTable.Rows.Add(dr);
                    }

                    DataGridViewRow heterow = new DataGridViewRow();

                    DataGridViewComboBoxCell comboCell = new DataGridViewComboBoxCell();
                    comboCell.DataSource = _DataTable;
                    comboCell.ValueMember = "value";
                    comboCell.DisplayMember = "text";
                    DataGridViewCheckBoxCell checkbox = new DataGridViewCheckBoxCell();
                    checkbox.Value = true;
                    DataGridViewTextBoxCell FileName = new DataGridViewTextBoxCell();
                    FileName.Value = Shows.Rows[i]["serie"].ToString();
                    DataGridViewTextBoxCell imdb = new DataGridViewTextBoxCell();
                    imdb.Value = "";

                    heterow.Cells.Add(checkbox);
                    heterow.Cells.Add(FileName);
                    heterow.Cells.Add(comboCell);
                    heterow.Cells.Add(imdb);
                    dataGridView.Rows.Add(heterow);
                }
            }
        }

        private void ResetDataTable()
        {
            _DataTable = new DataTable();
            DataColumn dc;
            dc = new DataColumn("text", System.Type.GetType("System.String"));
            this._DataTable.Columns.Add(dc);
            dc = new DataColumn("value", System.Type.GetType("System.String"));
            this._DataTable.Columns.Add(dc);
            dr = this._DataTable.NewRow();
            dr["text"] = "Custom";
            dr["value"] = "";
            this._DataTable.Rows.Add(dr);
        }

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

        private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {
                string txt = ((ComboBox)sender).SelectedValue.ToString();
                int rowIndex = this.dataGridView.CurrentRow.Index;
                DataGridViewRow row = this.dataGridView.Rows[rowIndex];
                this.dataGridView[3, rowIndex].Value = string.Format("{0}", txt);
            }
            catch
            { }
        }


        private void dataGridView_EditingControlShowing(object sender,
            DataGridViewEditingControlShowingEventArgs e)
        {
            if (dataGridView.CurrentCell.ColumnIndex == 3)
            {
                // If we are editing the imdb link
                // ARGH set combobox til custom, for crying out loud!!

            }

            ComboBox combo = e.Control as ComboBox;
            if (combo != null)
            {
                // Remove an existing event-handler, if present, to avoid
                // adding multiple handlers when the editing control is reused.
                combo.SelectedIndexChanged -=
                    new EventHandler(ComboBox_SelectedIndexChanged);

                // Add the event handler.
                combo.SelectedIndexChanged +=
                    new EventHandler(ComboBox_SelectedIndexChanged);
            }
        }
        private DataTable Populate(string sqlCommand)
        {
            SqlConnection northwindConnection = new SqlConnection(global::Seriesindexer.Properties.Settings.Default.DatabaseConnectionString);
            northwindConnection.Open();

            SqlCommand command = new SqlCommand(sqlCommand, northwindConnection);
            SqlDataAdapter adapter = new SqlDataAdapter();
            adapter.SelectCommand = command;

            DataTable table = new DataTable();
            table.Locale = System.Globalization.CultureInfo.InvariantCulture;
            adapter.Fill(table);

            return table;
        }
    }
}
Avatar billede doomstone-dk- Nybegynder
15. maj 2008 - 19:42 #1
Ingen der kan hjælpe?
Her er et image af hvordan det ser ud.
http://www.aocdb.info/sd/DoomSeries2.JPG
Avatar billede frille Nybegynder
15. maj 2008 - 21:42 #2
Det kan fint lade sig gøre...

men det er noget tid siden jeg har brugt det.

Som jeg ser det, ville jeg lave en CurrencyManager på de data der er tale om.
this.cm = (CurrencyManager) this.BindingContext[this.dv];

dv er et dataview der pakker tabellen ind.

Det smarte er så behøver du aldrig mere bruge ordet index!... så kan du bare på currency manageren bruge følgende:

String seriename = cm.Current.Row["seriename"]
Så får du den værdi som der er markeret i comboboxen!

Fx hvis du vælger 2. række så vil current give dig American Dad!

Jeg sys i starten det var noget sært noget, men nu er currency managere seje!

håber du kan bruge det....
Avatar billede frille Nybegynder
15. maj 2008 - 21:47 #3
Du har skudt spurve med kanoner... du havde slet ikke behøvet alt dette manuelle arbejde.

Din SQL resultat skal bare ind i et dataset også visers i et grid... datasettet kan godt håndtere relationer til andre tabeller! Så alt hvad der ligger i komboboxen kan såvel ligge i tabellerne i databasen. Prøv at søg på databinding og relationer i .net...
Avatar billede frille Nybegynder
15. maj 2008 - 21:50 #4
min hjemmeside - http://itpedersen.dk/ se under datalogi - itsprog - c#
Avatar billede doomstone-dk- Nybegynder
15. maj 2008 - 22:41 #5
Fandt løsningen
DataGridViewComboBoxCell cell = dataGridView.Rows[dataGridView.CurrentRow.Index].Cells[2] as DataGridViewComboBoxCell;

Dog ved jeg ikke lige hvordan jeg kan "force" den til en index.
F.eks. når den loader form vil jeg gerne have dem alle til at have valgt combobox index 1, automatisk.
Avatar billede doomstone-dk- Nybegynder
28. maj 2008 - 20:41 #6
Lukker,
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