Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Devexpress SearchLookUpEdit数据库中的设置值_C#_Devexpress - Fatal编程技术网

C# Devexpress SearchLookUpEdit数据库中的设置值

C# Devexpress SearchLookUpEdit数据库中的设置值,c#,devexpress,C#,Devexpress,我的表单加载中有以下代码,用于在我的datatable中填充数据,然后在我的SearchLookupEdit中填充: FillGrids(oData, "POLIST", "SELECT [PORecord].[POID],[ItemCode],[PONumber]," + "[SiteNo]+' '+[Place]+' '+[Name]+' '+[ScopeOfWork]" + "+' '+CAST([DeliveryDate] AS VARCHAR(30))" + "+'

我的表单加载中有以下代码,用于在我的datatable中填充数据,然后在我的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控件?

在获取记录的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";

要在使用datatable将searchlookupedit绑定到dataset时显示值或设置其值,它应将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;
    }

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

据我所知,在向数据库中添加新项目后,是否尝试刷新组合框的内容?否。。假设我有一个表单,其中包含用于添加数据的searchlookupedit,并且该表单将用于更新数据。问题是我找不到将数据从数据库加载到searchlookupedit的方法。如果我有一个datagrid,其中有一行数据,那么当我编辑一行数据时,我只会得到整行数据记录,然后当窗体加载时,我在上面编辑的是我用来将数据从数据库加载到控件的代码。我认为editvalue事件是这里的问题,我不知道在设置editvalue之前,如何设置searchLookup的DataSource、ValueMember、DisplayMember属性?在设置editvalue之前,Datasource、valuemember和displaymember在何处设置。对不起,我的不好,我说得不太清楚。。在我上面的代码中,当我调用使用sqldatareader从数据库获取数据并将该值传递给(searchlookupedit)cmbPOID.editvalue的函数时,它确实起作用。问题是它将自动转到事件editvaluechange,该事件给出错误“对象引用未设置为对象的实例”我在这次活动中缺少一些东西,感谢SidAhmed阅读了你的评论,它应该可以正常工作。但是我的坏。。我的datatable上的列名PoID与我的searchLookup.Properties.ValueMember=“PoID”不匹配;这就是为什么它不起作用。。。我可以给你的意见代表:D谢谢