如何向DataTable中插入“空”行?

3
我正在使用DevExpress的LookUpEdit控件。我的数据库有两个表来控制控件选项的填充。一个叫做MaintCategory,另一个叫做MaintItem。这引入了程序中的魔法数字(CategoryID),但允许大量的运行时自定义。
我的问题在于如何允许用户取消选择下拉框,而无需为每个CategoryID添加“空”项目。难道没有一种方法可以注入一个空白行吗?在控件级别或我构造返回的DataTable时?
这是我用来填充所有控件选择的DAL方法。
public static DataTable GetMaintItems(int iCat)
    {
        using (var context = CmoDataContext.Create())
        {
            IQueryable<tblAdminMaintItem> tItems = context.GetTable<tblAdminMaintItem>();

            return (tItems.Where(item => item.CategoryID == iCat & item.Active == true).OrderBy(item => item.OrderID).Select(
                item => new { item.ItemID, item.ItemDescription })).CopyLinqToDataTable();
        }
    }

无法理解为什么需要有一个空行。你所说的取消下拉菜单的选择“在我不添加“空”项目的情况下取消选择下拉菜单……”是什么意思?你能详细说明用法吗?对于下拉菜单,将Selecteditem设置为-1即可完成工作。 - Kangkan
@Kangkan:现在,一旦他们在下拉菜单中选择了一个项目,他们就不能“改变主意”并决定不想选择该类别的任何内容。没有取消选择、清除、空白等选项。那更有意义些。 - Refracted Paladin
3个回答

3

我最近在使用DevExpress的LookUpEdit控件开发一个应用时,遇到了非常类似的问题 -- 无法将控件恢复为没有选择的状态。

我的解决方案是:

  1. LookUpEdit.Properties.AllowNullInput属性设置为true
  2. 添加一个事件处理程序到LookUpEdit.Validating事件中。
  3. 在事件处理程序中,检查Text属性是否为空,并手动将EditValue设置为null

换句话说,就像这样:

void m_lookUpEdit_Properties_Validating(object sender, CancelEventArgs e)
{
    if (string.IsNullOrEmpty(m_lookUpEdit.Text))
    {
        m_lookUpEdit.EditValue = null;
    }
}

这允许用户清除控件中的文本,并将其值有效地重置为null


2

0

为什么不试试这样做:

    dropdown.DataSource = GetMaintItems(x);
    dropdown.DataTextField = "Name";
    dropdown.DataValueField = "ID";
    dropdown.DataBind();
    dropdown.Items.Insert(0, new ListItem("Select item", "-1"));

谢谢, Flores


谢谢您的帮助,不幸的是我正在使用 DevExpress LookUpEdit Control,它没有 Items - Refracted Paladin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接