1

データテーブルにデータを入力し、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 コントロールに設定またはロードする方法です。

4

2 に答える 2

0

datatable を使用してデータセットにバインドするときに値を表示するか、searchlookupedit に値を設定するには、searchlookupedit.properties.value メンバーを、次のような 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

于 2012-08-31T04:01:35.737 に答える
0

レコードの POID の値を取得したら、アイテムを編集する場合に備えEditValueてフォームの前にプロパティを設定し、次のようにします。ShowDialog

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";
于 2012-08-30T13:48:42.187 に答える