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


Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 09:18:07 - Mikael Källqvist, i forum c# (c-sharp), Tråden har 18 Kommentarer och lästs av 1201 personer

Jag skriver en tre-skiktad databaslösning där jag vid flera tillfällen vill fylla en ComboBox med värden. Funktionen ComboBox.Items.Add(string) fungerar bra när jag testar den i t.ex. en vanlig knapp, men när jag instantierar mitt formulär och anropar en egen funktion för att hantera ComboBoxen fungerar det inte. Kan någon hjälpa mig med detta? //M


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 11:30:45 - Benni Svensson

Vill du visa koden på vilket sätt du anropar, och hur din class ser ut.


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:05:27 - Mikael Källqvist

Jag har inte koden på min dator just nu men ungefär så här:

FRÅN MELLANSKIKTET:

//Kopplingar till DB och annat

foreach(rad in rader){

frmMittFörstaFormulär.laddaCombo("sträng som innehåller första posten i DB");

}


I FORMULÄRET frmMittförstaFormulär:

//Instantiering av mellanskiktsklassen och anrop av den funktion som hämtar data i DB

public void laddaCombo(string s){

cboCombo.Items.Add(s);
}


Hoppas du förstår lite vad jag menar. Jag har testat med att skriva ut strängen i funktionen laddaCombo och jag får över rätt data. När jag räknar posterna i comboboxen (cboCombo.Items.Count.ToString()) så får jag fram rätt antal poster, men de visas helt enkelt inte i comboboxen. Jag har testat samma sak med en lista eller textfält men inget av det fungerar.

Har du någon idé eller alternativ lösning?
//M


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:17:34 - Johan Bovin

om antalet är rätt så testa att kalla på comboboxens Refresh metod... så skall du tvinga den att rita om sig. kolla om det löser problemet.
Om du lägger till väldigt många object borde du nog kolla på beginupdate och endupdate metoderna


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:29:07 - Mikael Källqvist

Jag har testat att göra en refresh, men det verkar inte fungera. Antalet poster kan heller inte vara problemet eftersom jag kör mot en testdatabas med enbart 10 poster i.

Om man håller sig inom samma klass fungerar det att anropa funktionen. Det är bara när man försöker anropa funktionen från en annan klass som värdena inte vill läggas till. Helskumt!


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:37:43 - Johan Bovin

Får du nåt exception?
Om jag tolkar dig rätt så innehåller comboboxen rätt antal poster, men de visar sig inte på skärmen? om du kollar i Items finns alla posterna där då? är applikationen multitrådad?
------------
en alternativ lösning är ju att formuläret bara hämtar upp raderna från underliggande lager, vilket jag anser är ett bättre och snyggare alternativ. Detta möjliggör ju att du byter ut gui:et till något annat. Nu är det ju skiktat men inte speciellt generellt...


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:44:29 - Mikael Källqvist

Du har tolkat mig helt rätt. Antalet poster stämmer och om jag skriver ut dem i konsollen så stämmer de. Hur gör jag för att kolla i Items efter posterna? Jag är ganska ny i C# så du får ursäkta min okunskap :-)

Applikationen kör bara i en tråd.

//M

----

Jag förstår vad du menar med att hämta upp datan från mellanskiktet med en gång. Det kanske är en mer generell och bättre lösning...men man undrar ju vad f-n som är problemet med att göra så här.


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:47:20 - Johan Bovin

ok, men då kan vi ju iallafall konstatera att det är det grafiska som inte uppdaterar sig.
Använder du vs.net så kan du sätta en breakpoint på nåt bra ställe och göra en watch på din combobox, då kan du välja att titta på Items.

--------------------
jag har testat med ett litet exempel och jag ser inga problem med det du gör egentligen... du får nog kolla över koden lite noggrannare. lägger du till datat i rätt combobox? på rätt instans av formuläret? hur skickar du formuläret till datalagret?

<code>

using System;
using System.Drawing;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;

namespace Test
{
/// <summary>
/// Summary description for Form1.
/// </summary>
public class Form1 : System.Windows.Forms.Form
{
private System.ComponentModel.IContainer components;
private System.Windows.Forms.ComboBox comboBox1;
private System.Windows.Forms.Button button2;

public Form1()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();


}
public void AddToCombo(string item)
{
comboBox1.Items.Add(item);
}
/// <summary>
/// Clean up any resources being used.
/// </summary>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if (components != null)
{
components.Dispose();
}
}
base.Dispose( disposing );
}

#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.comboBox1 = new System.Windows.Forms.ComboBox();
this.button2 = new System.Windows.Forms.Button();
this.SuspendLayout();
//
// comboBox1
//
this.comboBox1.DropDownStyle = System.Windows.Forms.ComboBoxStyle.Simple;
this.comboBox1.Location = new System.Drawing.Point(16, 24);
this.comboBox1.Name = "comboBox1";
this.comboBox1.Size = new System.Drawing.Size(264, 112);
this.comboBox1.TabIndex = 3;
this.comboBox1.Text = "comboBox1";
//
// button2
//
this.button2.Location = new System.Drawing.Point(40, 208);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(96, 48);
this.button2.TabIndex = 2;
this.button2.Text = "BackGround";
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// Form1
//
this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
this.ClientSize = new System.Drawing.Size(336, 325);
this.Controls.AddRange(new System.Windows.Forms.Control[] {
this.comboBox1,
this.button2});
this.Name = "Form1";
this.Text = "Form1";
this.ResumeLayout(false);

}
#endregion

/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
System.Windows.Forms.Application.Run(new Form1());
}

private void button2_Click(object sender, System.EventArgs e)
{
new DataLayer(this).GetRows();
}

}
}

using System;

namespace Test
{
/// <summary>
/// Summary description for DataLayer.
/// </summary>
public class DataLayer
{
Form1 frm;
public DataLayer(Form1 frm)
{
this.frm=frm;
}
public void GetRows()
{
for(int i=0;i<10;i++)
{
frm.AddToCombo(i.ToString());
}
}
}
}
</code>


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 13:56:00 - Mikael Källqvist

Jag skall testa att debugga och se vad jag får fram. Tack för din hjälp!
//Mike

- - - - - - - - -

Jag har gjort precis som du visar i koden, men antagligen missat i instatieringen. Jag skall testa att skriva om den, men det lutar nog åt att jag skriver om hela klabbet och hämtar upp allting direkt från mellanlagret. Tack igen för hjälpen!

//Mike


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:15:57 - Johan Bovin

ja, det blir en snyggare lösning om du låter gui:et hämta allt från mellanlagret som i sin tur bara kommunicerar mot databasen. På så sätt får du en struktur som är lättare att ändra i, underhålla och byta ut komponenter i.
Lycka till...


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:28:35 - Mikael Källqvist

Finns det ingen invändning mot antalet publika variabler i en sådan lösning? Har jag missat något när jag försöker minimera antalet publika variabler i min kod?


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:41:24 - Johan Bovin

tja, det bästa är ju att använda sig av properties och publika metoder istället för att exponera publika variabler. då har du mer kontroll över vad som händer med dina variabler. Jag använder mig stort sett aldrig av publika variabler men väldigt ofta av properties. Men du borde väl klara dig med att t.ex. returnera dina rader istället i publik metod, om du inte vill lagra dem i en variabel ifall fler skall använda samma. Allting hänger ju på hur man vill designa och vilket syfte man har...


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:46:30 - Benni Svensson

Kan detta hjälpa?
Jag visar här lite koder som fungerar kanonbra:
<code>
using System.Data;
using System.Data.OleDb;
//****
private OleDbConnection con;
private OleDbDataAdapter da;
private DataSet ds;
//****
string CONstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Försäljning.mdb";
con = new OleDbConnection(CONstring);
string s = "SELECT Företagsnamn,Kontaktperson FROM Kunder";
da = new OleDbDataAdapter(s,con);
ds = new DataSet("Kunder");
try
{
con.Open();
da.Fill(ds,"Kunder");
con.Close();
}
catch(Exception fel)
{
MessageBox.Show(fel.Message.ToString());
}
radioButton1.Checked=true;
LaddaListrutan();
//**
private void LaddaListrutan()
{
listBox1.Items.Clear();
string k;
if(radioButton1.Checked==true)
{
k="Företagsnamn";
}
else
{
k="Kontaktperson";
}
int rader = ds.Tables["Kunder"].Rows.Count;
string s;
for(int i = 0;i < rader; i++)
{
s=ds.Tables["Kunder"].Rows[i][k].ToString();
listBox1.Items.Add(s);
}
}

private void radioButton1_CheckedChanged(object sender, System.EventArgs e)
{
LaddaListrutan();
}

private void listBox1_DoubleClick(object sender, System.EventArgs e)
{
this.Text= listBox1.Text.ToString();
}
</code>
Formuläret består då av en listRuta och två radioButton.

Kanske du kan få någon ide.


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:51:04 - Mikael Källqvist

Publika variabler är ju en genväg, man spar ju in en hel del kod, men i förlängningen kanske properties är en bra väg att gå.

Jag är förstås intresserad av att skriva ett så effektivt och designmässigt sett tilltalande program som möjligt. Bra att kunna få lite synpunkter på det här sättet.

//Mike


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 14:55:04 - Mikael Källqvist

Tack för det. Jag skall jämföra med min kod och begrunda
//M


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 15:04:10 - Johan Bovin

Genom att exponera en variabel publikt kan du ju aldirg vara säker på vad den innehåller. om du däremot har properties kan du t.ex. köra vissa kontroller av vad variablen får innehålla, dessutom kan du ju t.ex. bara exponera en propertie som readonly vilket gör att nån annan bara kan läsa men inte sätta, kan vara behändigt när man inte vill att nån skall "talla" på ens variabler...
Lite kod är oftast inte lika med bra kod, oftare är det faktiskt tvärtom, speciellt ur ett återanvändbarhetssyfte och läsbarhetssyfte...


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 15:38:49 - Raderat konto

Man vill ju aldrig att någon skall "talla" på ens variabler :-).

Jag menade verkligen inte att lite kod är bra kod. Jag håller helt med dig om att läsbarheten och återanvändbarheten är två viktiga aspekter.

Nu skall jag skriva lite kod och tackar så mycket för visat intresse.

/Mike


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 15:39:22 - Raderat konto

Man vill ju aldrig att någon skall "talla" på ens variabler.

Jag menade verkligen inte att lite kod är bra kod. Jag håller helt med dig om att läsbarheten och återanvändbarheten är två viktiga aspekter.

Nu skall jag skriva lite kod och tackar så mycket för visat intresse.

//Mike


Svara

Sv: Problem med ComboBox.Items.Add() i C#

Postades av 2004-03-31 15:44:06 - Mikael Källqvist

Jag menade inte att lite kod är bra kod. Jag tycker verkligen att läsbarhet och återanvändbarhet är två viktiga faktorer att beakta.

Nu skall jag skriva om programmet så jag tackar så mycket för visat intresse.
//Mike


Svara

Nyligen

  • 08:28 Butiksskyltar: Hur upplever utbude
  • 22:31 Slappna av
  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper

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 832
27 960
271 761
5 286
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