webForumDet fria alternativet

Checkbox problem i C#

8 svar · 344 visningar · startad av saw

sawMedlem sedan mars 20011 880 inlägg
#1

Jag kommer ite på ett bra sätt att lösa detta.
Jag har 11 text rutor och 3 checkboxar.
Textrutorna initieras så här:

tr = new TextBox[11]; 

            tr[0]=textBoxFirma; 
            tr[1]=textBoxNamn; 
            tr[2]=textBoxBox; 
            tr[3]=textBoxAdress; 
            tr[4]=textBoxPostOrt; 
            tr[5]=textBoxTelefon; 
            tr[6]=textBoxMobil; 
            tr[7]=textBoxFax; 
            tr[8]=textBoxURL; 
            tr[9]=textBoxEpost; 
            tr[10]=textBoxAnteckning;

Sedan körs denna kod:

string kolumn = listBoxTotal.SelectedItem.ToString(); 
            string SQL = "Select Firma,Namn,Box,Adress,PostOrt,Tel,
Mobil,Fax,URL,Epost,Anteck,EjLjud,Info,SkickCd FROM t_Kunder
 WHERE Firma  = '" + kolumn + "'"; 
                
                    
da = new OleDbDataAdapter(SQL, con); 
ds = new DataSet("frånKund"); 
            
try 
{ 
 con.Open(); 
 da.Fill(ds, "frånKund");    
 con.Close(); 
} 
catch(Exception fel) 
{ 
 MessageBox.Show(fel.Message,"Databasfel"); 
}    
            
int a = 0; 
            
  foreach(TextBox t in tr) 
  { 
    t.Text = ds.Tables["frånKund"].Rows[0][a].ToString();                
    a++; 
  }
}

Detta fungerar kanonbra, men jag kommer inte på hur jag skall
fylla på med checkboxarna.
Jag borde säkert öka tr med 3, men då säger debuggen att jag
inte kan blanda textboxar med checkboxar. Hur bör jag göra här?

Sedan borde jag ju ha en ifsats för att kolla om de är falskt eller
sant?

Men kan/bör jag göra detta inne i foreach slingan?

Tacksam för svar.

nikoMedlem sedan juni 20022 599 inlägg
#2

Byt typ på tr till nåt som både TextBox och CheckBox ärver av. Tex Form eller för enkelhetens skull Object.

Object[] tr;

tr = new Object[14]; 
//Fyll på med textboxar, checkboxar eller vad du vill precis som tidigare.

//osv ..

foreach(Object t in tr) 
{ 
	//Kolla om det är en [i]TextBox[/i] och casta från [i]Object[/i] till [i]TextBox[/i] isåf.
	if(t is TextBox)
		((TextBox)t).Text = ds.Tables["frånKund"].Rows[0][a].ToString();
	else
		//Hantera checkboxar här.         
}
sawMedlem sedan mars 20011 880 inlägg
#3

Det tycks fungera, men jag faller på checkboxarna.
Jag får fel när jag försöker så här:

((checkbox)t)[a].Checked = (bool)ds.Tables["frånKund"].Rows[0]
[a].Value;

Hur bör jag göra?
PS
Jag använder mig av object
DS

nikoMedlem sedan juni 20022 599 inlägg
#4

Först och främst bör du skriva: CheckBox eftersom C# är känsligt för stora och små bokstäver. Sen är jag tveksam till din castning till bool. Datasetet innehåller väl strängvärden?

Prova:

if (ds.Tables["frånKund"].Rows[0][a].ToString()=="nånting")
	((CheckBox)t).Checked=true;
else
	((CheckBox)t).Checked=false;

Eller lite "hippare":

((CheckBox)t).Checked=(ds.Tables["frånKund"].Rows[0][a].ToString()=="nånting")

Du får så klart ersätta "nånting" med det strängvärde som innebär att boxen ska vara ikryssad.

sawMedlem sedan mars 20011 880 inlägg
#5

Tack niko för att du försöker, men strul iallafall.
Det vissade sig att jag måste ha enbart textboxarna i en array, jag fick så många problem annars.

Vad jag försöker nu är att när jag läser in data, så försöker jag att plocka checkbox för checkbox.

		DataRow dr=ds.Tables["frånKund"].Rows[0]; 
			
			if ( dr["EjLjud"].ToString()=="1")
		{
			checkBox1.Checked=true;
		}
			else
				checkBox1.Checked=false;

I taballen så är det sparat som 1 så därför försöker jag med det, men tyvärr.....
Är jag ett helt hopplöst fall???

nikoMedlem sedan juni 20022 599 inlägg
#6

Kan väl inte se nåt direkt fel på den kodsnutt du nu visar ..

Vad har fältet "EjLjud" för typ i databasen?

Om det redan är en string så kanske den innehåller blanktecken på slutet? Prova isåf:

if ( dr["EjLjud"].ToString().Trim()=="1")

Om det är ett tal kan du skriva:

if ((int)dr["EjLjud"]==1)
sawMedlem sedan mars 20011 880 inlägg
#7

När jag gjorde databasen först(i Access) så var datatypen ja/nej.
Nu när den är inporterad till SQL server 2000 så är datatypen bit.

Jag fick inga fel på koden som jag visade, men det hände ingenting

nikoMedlem sedan juni 20022 599 inlägg
#8

Nu när den är inporterad till SQL server 2000 så är datatypen bit.

OK. Datatypen Bit uppfattas i FrameWorken som Boolean vilket innebär att ToString returnerar "True" och inte "1".

Du ska alltså skriva, helt enkelt:

checkBox1.Checked=(bool)dr["EjLjud"];

eller:

checkBox1.Checked=(dr["EjLjud"].ToString()=="True");

.. om du vill krångla till det.

Ett tips: Om du vill se vilken datatyp en kolumn motsvarar så kan du skriva:

System.Windows.Forms.MessageBox.Show(dr["Kolumnnamn"].GetType().ToString());

Bit i SQL-server ger då System.Boolean.

sawMedlem sedan mars 20011 880 inlägg
#9

Tack, efer att har hittat ett annat fel i koden, så började det att fungera bra....

124 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)