(自学日记)DevExpress GridView单元格输入值时弹出筛选列表,RepositoryItemGridLookUpEdit

一、弹出的表是绑定了一个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;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值