Jag kommer ite på ett bra sätt att lösa detta. Visst går det göra inne i loopen, men om det är snyggt eller inte kan ju diskuteras : Tack Hultan. Nu är jag kanske helt ute och seglar men jag försöker så här. Jag skulle tro att du har ett Null-värde i någon av dessa kolumner, och att det var det som gav felmeddelandet. När du gör enligt alternativ två så jämför du ju med en sträng och det returnerar boolean false, vilket kanske är ok. Om du i stället vill returnera true om värdet är null så får du göra så här : ...eller snarare, om jag får rätta mig själv, så beror det på att det står "value" i stället för "Value". C# är ju case-sensitive. Checkbox problem
Jag har 10 text rutor och 3 kryssrutor.
Textrutorna initieras så här:
<code>
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;
</code
Sedan körs denna kod:
<code>
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++;
</code>
Men jag kommer inte på hur jag skall fylla på kryssrutorna.
Jag borde säkert öka tr med 3?
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.Sv: Checkbox problem
<code>
int a = 0;
foreach(a=0;a<13;a++)
{
if (a<10)
tr[a].Text = ds.Tables["frånKund"].Rows[0][a].ToString();
else
chk[a-10].Checked = (bool)ds.Tables["frånKund"].Rows[0][a].Value;
}
</code>
Observera här att jag förutsatt att checkboxarna ligger i en kontrollarray (chk) precis som textboxarna. Kontrollera även vad du får för returvärde på booleanfälten, beroende på om den returnerar true/false, 0/1 eller Yes/No så kanske konverteringen till bool misslyckas. Skriv då i stället :
<code>
chk[a-10].Checked = (ds.Tables["frånKund"].Rows[0][a].Value == "Yes");
</code>
Personligen skulle jag inte bry mig om att göra en loop här, men det är en personlig åsikt. Jag tycker inte att man tjänar mycket på att göra en loop här, eftersom du får lägga krut på att skapa kontrollarrayer för att kunna loopa. I slutändan blir det ungefär lika mycket kod (och mer lättläst?) att göra så här :
<code>
DataRow dr=ds.Tables["frånKund"].Rows[0];
textBoxFirma.Text = dr["Firma"].ToString();
textBoxNamn.Text = dr["Namn"].ToString();
textBoxBox.Text = dr["Box"].ToString();
// och så vidare...
chkEjLjud.Checked = (bool)dr["EjLjud"].Value;
</code>
Om man ändrar på antalet textfält som returneras i SQL-satsen så måste man ju in och justera i loopen vilket man nog lätt glömmer och får buggar som följd. Men det är din kod, så gör som du vill och som du trivs med...Sv: Checkbox problem
Det jag gör är att jag försöker att översätta ifrån min första bok i C# till en sak jag behöver. Eftersom de där hade en slinga, så fortsatte jag med den.
Det var ju kanon hur du visade mig altenativen.
TackSv: Checkbox problem
Jag behåller Arrayen, den behövs vid andra tillfällen så så här ser det nu ut:
<code>
foreach(TextBox t in tr)
{
t.Text = ds.Tables["frånKund"].Rows[0][a].ToString();
a++;
}
DataRow dr=ds.Tables["frånKund"].Rows[0];
checkBox1.Checked = (bool)dr["EjLjud"].value;
checkBox2.Checked = (bool)dr["Info"].value;
checkBox3.Checked = (bool)dr["SkickCd"].value;
</code>
Tyvärr så lyckas inte detta (det har du redan förstått.
Jag får fel "object does not contain definition for 'value'".
Vad tror du??
[REDIGERAT]
Efter att ha hittat något litet fel på annan plats så fungerade detta:
<code>
checkBox1.Checked=(dr["EjLjud"].ToString()=="True");
</code>
Tack för att du försökte att hjälpa migSv: Checkbox problem
<code>
if (Convert.IsDbNull(dr["EjLjud"].Value))
checkBox1.Checked=true;
else
checkBox1.Checked=(dr["EjLjud"].ToString()=="True");
</code>
Eller alternativt :
<code>
checkBox1.Checked=Convert.IsDbNull(dr["EjLjud"].Value)?true:(dr["EjLjud"].ToString()=="True");
</code>
Eller så slog det mig just nu med att det räcker med att vända på uttrycket :
<code>
checkBox1.Checked=!(dr["EjLjud"].ToString()=="False");
</code>
Observera Not-operatorn (!) framför högersidan.
Som sagt, det var nog Null-värdet i kolumnen som gav felmeddelandet.Sv: Checkbox problem