【问题标题】:Devexpress SearchLookUpEdit set value from databaseDevexpress SearchLookUpEdit 从数据库中设置值
【发布时间】:2012-08-30 09:05:48
【问题描述】:

我的表单加载中有此代码,用于在我的数据表中填充我的数据,然后在我的 SearchLookupEdit 中填充:

FillGrids(oData, "POLIST",
    "SELECT [PORecord].[POID],[ItemCode],[PONumber],"
  + "[SiteNo]+' '+[Place]+' '+[Name]+' '+[ScopeOfWork]"
  + "+' '+CAST([DeliveryDate] AS VARCHAR(30))"
  + "+' '+CAST([PRNumber]AS VARCHAR(10))+' '+[Requisitioner] AS Name,"
  + "[UnitPrice],[Quantity],[Unit],Completed,Status"
  + " FROM [Globaltek-Final].[Project].[PORecord]"
  + " INNER JOIN Project.POStatus ON Project.PORecord.POID = Project.POStatus.POID",
  CommandType.Text);

cmbPOID.Properties.DataSource = oData.Tables["POLIST"];
cmbPOID.Properties.DisplayMember = "PONumber";
cmbPOID.Properties.ValueMember = "POID";

然后通过这个事件:

private void cmbPOID_EditValueChanged(object sender, EventArgs e)
{
    //cmbPOID.ShowPopup();

    System.Data.DataRow row = gvPOID.GetDataRow(gvPOID.FocusedRowHandle);
    try
    {
        oPOID = row[0].ToString();
        txtAmount.Text = row["UnitPrice"].ToString();
    }
    catch (NullReferenceException ex)
    {
        MessageBox.Show(ex.Message);
    }
}

我可以更改控件的值,然后将其添加到我的数据库中。

编辑:要加载我存储在数据库中的数据,我使用以下代码:

 using (SqlCommand xComm = new SqlCommand())
 {
     xComm.Connection = xConn;
     xComm.CommandText =
        "SELECT [ProjectID] ,[Year] ,[NTPID] ,Project.MainProjectRecord.[POID],"
      + "[SiteID]  ,[SiteName]  ,[SiteDetailsID] ,[EquipmentID]  ,[RepGlobaltekID],"
      + "[CompletedID] ,[OnGoingID]  ,Project.PORecord.POID"
      + " FROM [Globaltek-Final].[Project].[MainProjectRecord]"
      + " INNER JOIN Project.PORecord ON Project.MainProjectRecord.POID = Project.PORecord.POID"
      + " WHERE ProjectID = @recordID";
     xComm.CommandType = CommandType.Text;
     xComm.Parameters.AddWithValue("@recordID", RecordID);

     SqlDataReader xReader = null;
     try
     {
         xConn.Open();
         xReader = xComm.ExecuteReader();
         while (xReader.Read())
         {
             txtSiteID.Text = xReader["SiteID"].ToString();
             txtSiteName.Text = xReader["SiteName"].ToString();
             cmbPOID.EditValue = xReader["POID"].ToString();
             cmbPOID.Properties.GetDisplayTextByKeyValue(xReader["POID"].ToString());
             //cmbPOID.EditValue = xReader["POID"].ToString();
         }
         xReader.Close();
     }
     .....

我的问题是如何设置或加载从数据库中获取的值返回到 SearchLookupEdit 控件?

【问题讨论】:

  • 据我了解,您是在向数据库添加新项目后尝试刷新组合框的内容吗?
  • No.. 假设我有一个带有 searchlookupedit 的表单来添加数据,并且这个表单将用于更新数据,问题是我找不到将数据从数据库加载到搜索查找编辑

标签: c# devexpress


【解决方案1】:

在获取记录的 POID 值后,只需在表单 ShowDialog 之前设置 EditValue 属性,以防您编辑项目,如下所示:

using(var dlg = new ProjectForm())
{
    dlg.searchLookUp.EditValue = poid;

    dlg.ShowDialog(); //The rest of your code
}

在加载表单时,您应该设置 searchLookup 的 DataSource 属性。属性 ValueMember 和 DisplayValue 可以通过设计器设置,尽管我会在代码中设置它们

searchLookup.DataSource = myFunctionToGetData();
searchLookup.Properties.DisplayMember = "PONumber";
searchLookup.Properties.ValueMember= "POID";

【讨论】:

  • 假设我有一个数据网格有一行数据,当我要编辑一行数据时,我只得到整行记录,然后当表单加载我上面的编辑是我用来将数据从数据库加载到我的控件的代码。我认为editvalue事件是这里的问题,我不知道如何
  • 您是否在设置 EditValue 之前设置了 searchLookup 的 DataSource、ValueMember、DisplayMember 属性?这样做,它应该可以正常工作。
  • 数据源、值成员和显示成员在设置编辑值之前设置。对不起,我的错误我没有说得很清楚..在我上面的代码中,当我调用我使用 sqldatareader 从数据库中获取数据并将该值传递给 (searchlookupedit)cmbPOID.editvalue 的函数时,它确实有效,问题是它会自动转到事件 editvaluechange 给出错误“对象引用未设置为对象的实例”我在事件 editvaluechange 上缺少某些内容
  • 感谢 SidAhmed 阅读您的评论,它应该可以正常工作。但后来我的坏..我的数据表上的列名 PoID 与我的 searchLookup.Properties.ValueMember = "POID"; 不匹配这就是为什么editvalue它没有生效...我可以给你的评论代表:D谢谢
【解决方案2】:

要在使用 datatable 将 searchlookupedit 绑定到数据集时在 searchlookupedit 上显示值或设置值,它应该将 searchlookupedit.properties.valuemember 与您传递给 editvalue 的值相匹配,如下所示..

int value= 12;
       searchLookUpEdit1.Properties.ValueMember = "POID";
       searchLookUpEdit1.Properties.DisplayMember = "PONumber";
       searchLookUpEdit1.EditValue = ValueDisplay(); //it should match the value member

 private object ValueDisplay()
    {
        return value;
    }

对于我的问题,我首先填写数据表并将其填充到 searchlookupedit。设置 searchlookupedit.editvalue 时它是空白的,这是因为在我的数据表列上它的名称是“PoID”,而在我的值成员上它是“POID”。这应该修复并且必须使用相同的名称,以便 editvalue 生效。我更改“POID”->“PoID”。 :D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多