一、弹出的表是绑定了一个DataTable。输入值时立刻弹出搜索表,或者点击箭头下拉。
二、设置表的样式和绑定表
// 品号 品名 规格 数量 单位
List<string>sName = new List<string>();
sName.Add("品号");
sName.Add("品名");
sName.Add("规格");
sName.Add("数量");
sName.Add("单位");
sName.Add("操作");
for (int i = 0; i < sName.Count; i++)
{
dtBoxAdd.Columns.Add(sName[i]);
}
//增加空白行
dtBoxAdd.Rows.Add("", "", "", "", "");
gridControl1.DataSource = dtBoxAdd;
//设置弹出列表格式
RepositoryItemGridLookUpEdit lookUp = new RepositoryItemGridLookUpEdit();
//lookUp.PopupFormSize = new Size(450, 300);//下拉窗体尺寸
lookUp.BestFitMode = BestFitMode.BestFitResizePopup;//自适应窗体尺寸
lookUp.AcceptEditorTextAsNewValue = DefaultBoolean.True; //接受文本框的值作为新值显示
lookUp.View.RowHeight = 15; //行高
lookUp.ImmediatePopup = true;//输入值立即弹出下拉窗体
lookUp.SearchMode = GridLookUpSearchMode.AutoSearch;//设置为自动搜索模式
lookUp.PopupFilterMode = PopupFilterMode.Contains;//表格筛选列过滤模式
lookUp.TextEditStyle = TextEditStyles.Standard;//允许录入资料
lookUp.View.OptionsView.ShowAutoFilterRow = true;//下拉表格显示过滤行
//这里很重要,这个地方输入列名,当选中弹出的行后,返回的值就是该列选中行的值。通过这个值查询它在表内整行的值。
lookUp.ValueMember = "品号"; //sName[i];//获得值的字段名
lookUp.DisplayMember = "品号";//填入值的字段名
lookUp.DataSource = Global.dtStock;//绑定查询的表
gridView1.Columns["品号"].ColumnEdit = lookUp;//绑定列
RepositoryItemButtonEdit btOperate = new RepositoryItemButtonEdit();
btOperate.AppearanceDisabled.Options.UseTextOptions = true;
btOperate.AppearanceDisabled.TextOptions.HAlignment = HorzAlignment.Center;
btOperate.AutoHeight = false;
btOperate.TextEditStyle = TextEditStyles.HideTextEditor;
btOperate.ButtonsStyle = BorderStyles.NoBorder;
btOperate.BorderStyle = BorderStyles.HotFlat;
btOperate.ReadOnly = true;
btOperate.Buttons[0].ImageOptions.Image = Properties.Resources.cancel_16x16;
btOperate.Buttons[0].Kind = ButtonPredefines.Glyph;
btOperate.Buttons[0].ImageOptions.Location = ImageLocation.MiddleLeft;
btOperate.Buttons[0].Caption = "删除";
btOperate.Buttons[0].Visible = true;
btOperate.Buttons[0].Click += FormCreateIn_Click;
//修改表头样式
if (gridView1.Columns.Count > 0)
{
for (int i = 0; i < gridView1.Columns.Count; i++)
{
gridView1.Columns[i].Visible = true;
gridView1.Columns[i].AppearanceHeader.ForeColor = Color.Black;
gridView1.Columns[i].AppearanceHeader.TextOptions.HAlignment = HorzAlignment.Center;
gridView1.Columns[i].AppearanceCell.TextOptions.HAlignment = HorzAlignment.Center;
gridView1.Columns[i].OptionsColumn.AllowEdit = true;//设置列不可以编辑
gridView1.Columns[i].OptionsColumn.AllowSort = DefaultBoolean.True;//禁用标题行排序
gridView1.Columns[i].BestFit();
}
}
gridView1.Columns["品号"].OptionsColumn.AllowEdit = true;//设置列不可以编辑
gridView1.Columns["品号"].OptionsColumn.ReadOnly = false;
gridView1.Columns["品名"].OptionsColumn.AllowEdit = false;//设置列不可以编辑
gridView1.Columns["规格"].OptionsColumn.AllowEdit = false;//设置列不可以编辑
gridView1.Columns["单位"].OptionsColumn.AllowEdit = false;//设置列不可以编辑
gridView1.Columns["操作"].ColumnEdit = btOperate;
gridView1.Columns["操作"].Width = 10;
三、将弹出选中的行的值,写入到行,这里使用的是gridView1里面的CellValueChanging事件。弹出列表行后,会返回一个值。通过这个返回值查询它在表内整行的数据。
private void gridView1_CellValueChanging(object sender, DevExpress.XtraGrid.Views.Base.CellValueChangedEventArgs e)
{
int index = e.RowHandle;
string info = "品号 = '" + e.Value.ToString() + "'";
DataRow[] drArr = Global.dtStock.Select(info);//查询
if (drArr.Length == 0)
{
MessageBox.Show("未查询到物品信息");
return;
}
gridView1.SetRowCellValue(e.RowHandle, "品号", drArr[0]["品号"].ToString());
gridView1.SetRowCellValue(e.RowHandle, "品名", drArr[0]["品名"].ToString());
gridView1.SetRowCellValue(e.RowHandle, "规格", drArr[0]["规格"].ToString());
gridView1.SetRowCellValue(e.RowHandle, "单位", drArr[0]["单位"].ToString());
gridView1.SetRowCellValue(e.RowHandle, "数量", 1);
if (gridView1.RowCount== e.RowHandle+1)
{
dtBoxAdd.Rows.Add("", "", "", "", "");
}
for (int i = 0; i < gridView1.Columns.Count; i++)
{
gridView1.Columns[i].BestFit();
}
gridView1.Columns["操作"].Width = 100;
}
}