Hej,C# ComboBox DataSource: Ändra?
jag har en ComboBox som jag initerar enligt nedan. Det ska finnas ett bättre sätt att göra det (utan for-satser) men jag fick det aldrig att fungera.
Mitt problem är nu att min ComboBox innehåller ett antal värden som är hämtade ur en databas och sparade som Serial-objekt, som sedan läggs in i en ArrayList som sedan tilldelas som DataSource för min ComboBox (se klasserna nedan).
Jag har en TextBox där jag skriver in en söksträng, och för varje tecken jag trycker ner görs en sökninge i databasen (MySQL) och sedan uppdateras ComboBoxen (enligt nedanstående kod). Problemet är att ComboBox:en på sätt och vis hänger sig.
Den blir helt grå, men går fortfarnade att använda (om man klickar på pilen i ComboBox:en). Jag vet inte riktigt varför. Kan någon assistera?
ComboBox-initiering (görs vid Form_Load):
<code>
comboBox1.Items.Clear();
ArrayList tempList = new ArrayList();
dbConnection conn = new dbConnection();
string[] fields = new string[2];
fields[0] = "id";
fields[1] = "projectName";
string[,] result = conn.query("SELECT id, comment FROM SICSerials", fields);
for (int i = 0; i<result.GetLength(0); i++)
{
tempList.Add(new Serial(Convert.ToInt32(result[i, 0]), result[i, 1]));
}
comboBox1.DataSource = tempList;
comboBox1.DisplayMember = "serialComment";
comboBox1.ValueMember = "serialID";
</code>
Klassen Serial:
<code>
namespace SAC
{
public class Serial
{
private int id;
private string comment;
public Serial(int pId, string comment)
{
id = pId;
this.comment = comment;
}
public int serialID
{
get{return id;}
}
public string serialComment
{
get{return comment;}
}
}
}
</code>
Här är koden för själva uppdateringen, dvs när man skriver i TextBox:en som sedan uppdaterar ComboBoxen med värdena:
<code>
private void updateComboBox()
{
comboBox1.DataSource = null; // sätts för att vi ska kunna editera i listan så att säga
comboBox1.Items.Clear();
ArrayList tempList = new ArrayList();
dbConnection conn = new dbConnection();
string[] fields = new string[2];
fields[0] = "id";
fields[1] = "projectName";
string[,] result = conn.query("SELECT id, comment FROM SICSerials WHERE comment LIKE '%"+textBox3.Text+"%'", fields);
for (int i = 0; i<result.GetLength(0); i++)
{
tempList.Add(new Serial(Convert.ToInt32(result[i, 0]), result[i, 1]));
}
comboBox1.DataSource = tempList;
comboBox1.DisplayMember = "serialComment";
comboBox1.ValueMember = "serialID";
tempList = null;
conn = null;
}
</code>
Tacksam för hjälp!Sv: C# ComboBox DataSource: Ändra?
static string GetConnectionString()
{
if (InStr(HttpContext.Current.Request.Url.ToString, "localhost") > 0) {
GetConnectionString = ConfigurationSettings.AppSettings("ConnectionStringLocal");
} else {
GetConnectionString = ConfigurationSettings.AppSettings("ConnectionString");
}
}
static void FillListBox(DropDownList objName, string index, string Querystring, string firstItemText)
{
SqlClient.SqlDataReader rst = ReturnDataReader(Querystring);
objName.Items.Clear();
objName.Items.Add(new ListItem(firstItemText, 0));
while (rst.Read) {
objName.Items.Add(new ListItem(rst(1), rst(0)));
}
try {
if (index > 0 & objName.Items.Count > 1) {
objName.Items.FindByValue(index).Selected = true;
}
} catch (Exception ex) {
objName.SelectedIndex = 0;
} finally {
rst.Close();
}
rst.Close();
rst = null;
}
static DataSet ReturnDataset(string query)
{
SqlConnection conn = new SqlConnection(GetConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet dataset = new DataSet();
try {
adapter.SelectCommand = new SqlCommand(query, conn);
adapter.Fill(dataset);
} catch (SystemException ex) {
throw new ApplicationException("SQL: Kan inte köra frågan:" + Err.Description + query);
}
return dataset;
}
public static SqlDataReader ReturnDataReader(string sqlquery)
{
SqlConnection myConnection = new SqlConnection(GetConnectionString);
SqlCommand myCommand = new SqlCommand(sqlquery, myConnection);
myCommand.CommandType = CommandType.Text;
try {
myConnection.Open();
SqlDataReader result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
return result;
} catch (DataException ex) {
throw new SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" + Err.Description);
}
myCommand = null;
myConnection = null;
}
static void ExecuteQuery(string sqlquery)
{
string connectionstring = GetConnectionString();
SqlConnection Con = new SqlConnection(connectionstring);
SqlCommand cmd;
Con.Open();
cmd = new SqlCommand(sqlquery, Con);
try {
cmd.ExecuteNonQuery();
} catch (Exception ex) {
throw new SystemException("Fel vid anrop av sql-fråga: " + sqlquery + "-" + Err.Description);
}
Con.Close();
cmd = null;
Con = null;
}