轉帖|使用教程|編輯:龔雪|2023-06-30 10:30:08.173|閱讀 138 次
概述:本文將為大家介紹在DevExpress GridView的列中,如何使用RepositoryItemSearchLookUpEdit控件實現產品列表信息的展示和選擇,歡迎下載最新版組件體驗!
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
有時候我們為了方便,我們往往使用擴展函數的代碼方式創建很多GridView的操作功能,如上文中(點擊這里回顧>>)介紹過多行表頭的創建及綁定處理。本文介紹在DevExpress GridView的列中,使用RepositoryItemSearchLookUpEdit控件實現產品列表信息的展示和選擇。
DevExpress擁有.NET開發需要的所有平臺控件,包含600多個UI控件、報表平臺、DevExpress Dashboard eXpressApp 框架、適用于 Visual Studio的CodeRush等一系列輔助工具。
DevExpress技術交流群8:523159565 歡迎一起進群討論
例如在CRM客戶管理系統里面,有關報價單的界面如下所示,其中為了方便選擇報價單的產品,我們在DevExpress的GridView的列中,增加了一個RepositoryItemSearchLookUpEdit控件來承載列表信息的展示的操作。如下界面所示:
如果我們是手工處理,那么可以在GridControl的設計界面中創建所需要的列并綁定字段信息,如下所示:
而對應產品名稱的字段,我們需要使用它的列編輯控件來創建一個SearchLookupEdit的控件,如下所示:
然后還需要為這個視圖創建對應的列,如下所示:
手工操作看似畢竟簡單,但是不夠靈活,因此我們喜歡使用擴展函數的方式,通過代碼方式創建對應的控件以及綁定對應的字段信息,這樣可以極大的提高代碼的可維護性。
我們對GridControl和GridView的對象,創建了一些擴展函數,以便于對控件的彈性操作。
一般創建一些列的信息如下所示:
var colQuantity = grv.CreateColumn("Quantity", "銷售數量");
colQuantity.CreateSpinEdit();
grv.CreateColumn("ProductNo", "產品編碼").CreateTextEdit();
我們這里創建報價單信息列表,以及產品信息列表的處理代碼如下所示:
/// <summary>
/// 使用代碼創建GridView的綁定以及單元格編輯控件
/// </summary>
private void InitGridView()
{
var grd = this.gridControl1;
var grv = this.gridView1;
grv.Columns.Clear();
grv.CreateColumn(Id_FieldName, Id_FieldName).Visible = false;//創建一個字段,隱藏的,存儲記錄
productNameEdit = grv.CreateColumn("ProductName", "產品名稱").CreateSearchLookUpEdit();
grv.CreateColumn("SalePrice", "銷售單價").CreateTextEdit().ReadOnly = true;
//colQuantity.AppearanceCell.BackColor = Color.Moccasin;
//colQuantity.AppearanceCell.Options.UseBackColor = true;
var colQuantity = grv.CreateColumn("Quantity", "銷售數量");
colQuantity.AppearanceCell.BackColor = Color.Moccasin;
colQuantity.AppearanceCell.Options.UseBackColor = true;
colQuantity.CreateSpinEdit();
var colNote = grv.CreateColumn("Note", "備注說明");
colNote.AppearanceCell.BackColor = Color.Moccasin;
colNote.AppearanceCell.Options.UseBackColor = true;
colNote.CreateMemoEdit();
var colExpireDate = grv.CreateColumn("ExpireDate", "過期日期");
colExpireDate.AppearanceCell.BackColor = Color.Moccasin;
colExpireDate.AppearanceCell.Options.UseBackColor = true;
colExpireDate.CreateDateEdit();
grv.CreateColumn("ProductNo", "產品編碼").CreateTextEdit();
grv.CreateColumn("MaterialCode", "物料編碼").CreateTextEdit();
grv.CreateColumn("ProductType", "產品類型").CreateTextEdit();
grv.CreateColumn("Specification", "產品規格").CreateTextEdit();
grv.CreateColumn("Model", "產品型號").CreateTextEdit();
grv.CreateColumn("Unit", "標準單位").CreateTextEdit();
grv.InitGridView(GridType.NewItem, false, EditorShowMode.MouseDownFocused, "");
grv.InitNewRow += delegate (object sender, InitNewRowEventArgs e)
{
//數據記錄初始化的時候設置
//grv.SetRowCellValue(e.RowHandle, "Id", Guid.NewGuid().ToString());
//grv.SetRowCellValue(e.RowHandle, "DictType_ID", typeId);//存儲記錄的父ID
};
grv.ShowingEditor += new CancelEventHandler(gridView1_ShowingEditor);
grv.CellValueChanged += new DevExpress.XtraGrid.Views.Base.CellValueChangedEventHandler(gridView1_CellValueChanged);
}
其中注意產品信息里面,它使用了一個RepositoryItemSearchLookUpEdit控件。
productNameEdit = grv.CreateColumn("ProductName", "產品名稱").CreateSearchLookUpEdit();
我們把它保存在窗體的變量中,供其他部分的代碼調用創建它的視圖列信息,以及設置它的數據源等操作。
/// <summary>
/// 初始化數據字典
/// </summary>
private async void InitDictItem()
{
//初始化代碼
this.txtOrderStatus.BindDictItems("報價單狀態");
//綁定產品列表
var list = await BLLFactory<IProductService>.Instance.GetAllInUsed();
productNameEdit.BindDictItems(list, "ProductName", "Id", true, new LookUpColumnInfo[]
{
new LookUpColumnInfo() { FieldName = "ProductType", Caption = "產品類型", Width = 90},
new LookUpColumnInfo() { FieldName = "ProductName", Caption = "產品名稱", Width = 150},
new LookUpColumnInfo() { FieldName = "SalePrice", Caption = "產品單價", Width = 60},
new LookUpColumnInfo() { FieldName = "HandNo", Caption = "產品編碼", Width = 60},
new LookUpColumnInfo() { FieldName = "MaterialCode", Caption = "物料編碼", Width = 60},
new LookUpColumnInfo() { FieldName = "BarCode", Caption = "條形碼", Width = 60},
new LookUpColumnInfo() { FieldName = "Specification", Caption = "產品規格, Width = 60"},
new LookUpColumnInfo() { FieldName = "Model", Caption = "產品型號", Width = 60},
new LookUpColumnInfo() { FieldName = "Color", Caption = "顏色", Width = 60},
new LookUpColumnInfo() { FieldName = "ProductSize", Caption = "尺寸", Width = 60},
new LookUpColumnInfo() { FieldName = "Unit", Caption = "標準單位", Width = 60},
new LookUpColumnInfo() { FieldName = "Quantity", Caption = "產品數量", Width = 60},
new LookUpColumnInfo() { FieldName = "Note", Caption = "備注", Width = 120},
});
productNameEdit.View.OptionsView.ColumnAutoWidth = false;
}
上面代碼指定了編輯控件列表中的列,以及數據源信息,這樣通過擴展函數的代碼方式創建,省卻很多繁瑣的手工操作。
然后我們判斷主GridView的值變化的時候,跟蹤到產品信息,然后賦值給其他對應列的信息,這樣就可以復制產品的部分信息到列表中去了。
private async void gridView1_CellValueChanged(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
if (e.Column.FieldName == "ProductName" && e.Value != null)
{
var info = await BLLFactory<IProductService>.Instance.GetAsync(e.Value.ToString());
if (info != null)
{
//if (info.Quantity <= 1)
//{
// MessageUtil.ShowTips(string.Format("[{0}]庫存不足,請選擇其他產品", info.ProductName));
// this.gridView1.DeleteRow(e.RowHandle);
// return;
//}
this.gridView1.SetRowCellValue(e.RowHandle, "ProductNo", info.HandNo);
this.gridView1.SetRowCellValue(e.RowHandle, "MaterialCode", info.MaterialCode);
this.gridView1.SetRowCellValue(e.RowHandle, "ProductType", info.ProductType);
this.gridView1.SetRowCellValue(e.RowHandle, "Specification", info.Specification);
this.gridView1.SetRowCellValue(e.RowHandle, "Model", info.Model);
this.gridView1.SetRowCellValue(e.RowHandle, "Unit", info.Unit);
this.gridView1.SetRowCellValue(e.RowHandle, "SalePrice", info.SalePrice);
}
else
{
this.gridView1.SetRowCellValue(e.RowHandle, "ProductNo", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "MaterialCode", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "ProductType", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "Specification", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "Model", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "Unit", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "SalePrice", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "Quantity", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "Note", DBNull.Value);
this.gridView1.SetRowCellValue(e.RowHandle, "ExpireDate", DBNull.Value);
}
}
}
在界面的保存更新操作中,我們對其中的主表和明細表進行更新處理即可,如下代碼所示。
/// <summary>
/// 編輯狀態下的數據保存
/// </summary>
/// <returns></returns>
public override async Task<bool> SaveUpdated()
{
var info = await BLLFactory<IQuotationService>.Instance.GetAsync(ID);
if (info != null)
{
SetInfo(info);
try
{
#region 更新數據
bool succeed = await BLLFactory<IQuotationService>.Instance.UpdateAsync(info);
if (succeed)
{
//可添加其他關聯操作
await SaveDetail();
return true;
}
#endregion
}
catch (Exception ex)
{
LogTextHelper.Error(ex);
MessageDxUtil.ShowError(ex.Message);
}
}
return false;
}
以上就是使用擴展函數的方式,在DevExpress的GridView的列中,使用RepositoryItemSearchLookUpEdit控件實現產品列表信息的展示和選擇的操作,希望能夠給你提供參考的思路。
本文轉載自:
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@ke049m.cn
文章轉載自: