如何在组合框中添加新行?

时间:2014-05-23 18:33:33

标签: c# combobox row pocketpc

我开发了一款Pocket PC应用程序。 它工作但我想在组合框中添加一个新的(没有数据)行:

      SqlCeCommand sql3 = new SqlCeCommand("SELECT (ACM_EMPL.NUM_EMPL + '~' + ACM_EMPL.NOM_EMPL) AS NUM_EMPL FROM ACM_EMPL INNER JOIN ACM_ACT ON ACM_EMPL.NUM_EMPL = ACM_ACT.NUM_EMPL WHERE (ACM_ACT.NUM_ACTIVO = '" + oc.Text + "'AND ACM_ACT.NUM_CIA = '" + CIA.Text + "' AND ACM_ACT.NUM_TIPO = '" + TIPO.Text + "' AND ACM_ACT.SUB_NUM_ACT = '" + SUBNUM.Text + "') ", conn);
        sql3.ExecuteNonQuery();
        SqlCeDataAdapter cb3 = new SqlCeDataAdapter(sql3);
        DataTable dt3 = new DataTable();
        cb3.Fill(dt3);
        foreach (DataRow dr3 in dt3.Rows)
        {
            ma.cmbEmpleado.SelectedValue = dr3["NUM_EMPL"].ToString();
        }

它显示:enter image description here

我想添加一个" -select - "或者" "排,我怎么能这样做?我尝试了

    dt3.Rows.Add("----------");

以及类似的东西,但它不起作用!。

谢谢

4 个答案:

答案 0 :(得分:1)

试试这个:

SqlCeCommand sql3 = new SqlCeCommand("SELECT (ACM_EMPL.NUM_EMPL + '~' + ACM_EMPL.NOM_EMPL) AS NUM_EMPL FROM ACM_EMPL INNER JOIN ACM_ACT ON ACM_EMPL.NUM_EMPL = ACM_ACT.NUM_EMPL WHERE (ACM_ACT.NUM_ACTIVO = '" + oc.Text + "'AND ACM_ACT.NUM_CIA = '" + CIA.Text + "' AND ACM_ACT.NUM_TIPO = '" + TIPO.Text + "' AND ACM_ACT.SUB_NUM_ACT = '" + SUBNUM.Text + "') ", conn);
    sql3.ExecuteNonQuery();
    SqlCeDataAdapter cb3 = new SqlCeDataAdapter(sql3);
    DataTable dt3 = new DataTable();
    cb3.Fill(dt3);
    foreach (DataRow dr3 in dt3.Rows)
    {
        ma.cmbEmpleado.Items.Add(dr3["NUM_EMPL"].ToString());
    }
    ma.cmbEmpleado.Items.Insert(0, "------------");
    ma.cmbEmpleado.SelectedIndex = 0;

    cb3.Dispose();
    dt3.Dispose();

Obs:ma.cmbEmpleado.Items.Add(INDEX,TEXT);

答案 1 :(得分:1)

将行添加到DataTable,然后通过设置其属性将表绑定到ComboBox:

  SqlCeCommand sql3 = new SqlCeCommand("SELECT (ACM_EMPL.NUM_EMPL + '~' + ACM_EMPL.NOM_EMPL) AS NUM_EMPL FROM ACM_EMPL INNER JOIN ACM_ACT ON ACM_EMPL.NUM_EMPL = ACM_ACT.NUM_EMPL WHERE (ACM_ACT.NUM_ACTIVO = '" + oc.Text + "'AND ACM_ACT.NUM_CIA = '" + CIA.Text + "' AND ACM_ACT.NUM_TIPO = '" + TIPO.Text + "' AND ACM_ACT.SUB_NUM_ACT = '" + SUBNUM.Text + "') ", conn);
    sql3.ExecuteNonQuery();
    SqlCeDataAdapter cb3 = new SqlCeDataAdapter(sql3);
    DataTable dt3 = new DataTable();
    cb3.Fill(dt3);

DataRow row = dt3.NewRow();
row[0] = "";
dt3.Rows.InsertAt(row, 0);
cmb.DisplayMember = "NUM_EMPL";
cmb.ValueMember = "NUM_EMPL";
cmb.DataSource = dt3;

答案 2 :(得分:1)

问题:在您的代码中,您正在调用sql3.ExecuteNonQuery(),这在填写数据适配器时不是必需的。

在下面提到的代码中使用有效的连接字符串:

string sQuery = @"SELECT (ACM_EMPL.NUM_EMPL + '~' + ACM_EMPL.NOM_EMPL) AS NUM_EMPL FROM ACM_EMPL INNER JOIN ACM_ACT ON ACM_EMPL.NUM_EMPL = ACM_ACT.NUM_EMPL WHERE (ACM_ACT.NUM_ACTIVO = '" + oc.Text + "'AND ACM_ACT.NUM_CIA = '" + CIA.Text + "' AND ACM_ACT.NUM_TIPO = '" + TIPO.Text + "' AND ACM_ACT.SUB_NUM_ACT = '" + SUBNUM.Text + "') ";
string sConnectionString =  @"Data Source = C:\Program Files\" +
    @"Microsoft SQL Server Compact Edition\v3.5\Samples\" +
    @"Northwind.sdf";

using (SqlCeConnection conn = new SqlCeConnection(sConnectionString))
{
     SqlCeCommand sql3 = new SqlCeCommand(sQuery, conn);       
     SqlCeDataAdapter cb3 = new SqlCeDataAdapter(sql3);
     DataTable dt3 = new DataTable();
     cb3.Fill(dt3);

     foreach (DataRow dr3 in dt3.Rows)
     {
        ma.cmbEmpleado.Items.Add(dr3["NUM_EMPL"].ToString());
     }

     ma.cmbEmpleado.Items.Insert(0, string.Empty);
     ma.cmbEmpleado.SelectedIndex = 0;
}

注意:代码未经过测试。还使用了示例连接字符串。

答案 3 :(得分:1)

试试这个:

            SqlCeCommand sql3 = new SqlCeCommand("SELECT (ACM_EMPL.NUM_EMPL + '~' + ACM_EMPL.NOM_EMPL) AS NUM_EMPL FROM ACM_EMPL INNER JOIN ACM_ACT ON ACM_EMPL.NUM_EMPL = ACM_ACT.NUM_EMPL WHERE (ACM_ACT.NUM_ACTIVO = '" + oc.Text + "'AND ACM_ACT.NUM_CIA = '" + CIA.Text + "' AND ACM_ACT.NUM_TIPO = '" + TIPO.Text + "' AND ACM_ACT.SUB_NUM_ACT = '" + SUBNUM.Text + "') ", conn);
        sql3.ExecuteNonQuery();
        SqlCeDataAdapter cb3 = new SqlCeDataAdapter(sql3);
        DataTable dt3 = new DataTable();
        cb3.Fill(dt3);
        if (dt3.Rows.Count > 0)
        {

            ma.cmbEmpleado.DataSource = dt;
            ma.cmbEmpleado.DataValueField = dt3.Columns["NUM_EMPL"].ToString();
            ma.cmbEmpleado.DataTextField = dt3.Columns["NUM_EMPL"].ToString();
        }
        ma.cmbEmpleado.Items.Insert(0, "---------");
        ma.cmbEmpleado.Items[0].Value = "0";