【问题标题】:duplicate item in dropdownlist edit mode in gridview网格视图中下拉列表编辑模式中的重复项
【发布时间】:2015-03-28 19:49:01
【问题描述】:

我试图在编辑模式下用下拉列表填充我的 gridview 列之一。但它显示了一个重复的项目,这是该行在编辑模式之前的原始值。如何删除编辑模式下拉列表中的重复项?

普通模式:

http://i.imgur.com/ReqIvZN.jpg

编辑模式:

http://i.imgur.com/3PjXJhN.jpg

这些是我的代码:

    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        if ((e.Row.RowState & DataControlRowState.Edit) > 0)
        {
            DataRowView drv = e.Row.DataItem as DataRowView;

            DropDownList ddl = (DropDownList)e.Row.FindControl("ddl");
            ddl.DataTextField = "Name";
            ddl.DataValueField = "CategoryID";
            ddl.DataSource = Seminar_ListDB.getAllSemList();
            ddl.DataBind();
            //ddl.SelectedValue = drv["CategoryID"].ToString();
        }
    }

【问题讨论】:

    标签: c# asp.net gridview


    【解决方案1】:

    用途:

    ddl.Items.Clear();

    在绑定下拉列表之前。

    EDIT2:

    if (e.Row.RowType == DataControlRowType.DataRow)
        {
            if ((e.Row.RowState & DataControlRowState.Edit) > 0)
            {
                DataRowView drv = e.Row.DataItem as DataRowView;
    
                DropDownList ddl = (DropDownList)e.Row.FindControl("ddl");
                ddl.DataTextField = "Name";
                ddl.DataValueField = "CategoryID";
                ddl.Items.Clear();//add this line
                ddl.DataSource = Seminar_ListDB.getAllSemList();
                ddl.DataBind();
    
                ddl.SelectedValue = drv["CategoryID"].ToString();
            }
        }
    

    EDIT1:

    DropDownList.SelectedValue="Your_Value"
    or
    Dropdownlist.Items.FindByValue("Your_Value").Selected = true;
    or
    DropDownList.SelectedValue = DropDownList.Items.FindByText("Your_Text").Value;
    or
    Dropdownlist.SelectedItem.Text="Your_Text";
    

    从下拉列表中隐藏项目:

    var item = DropDownList1.Items.Select(p=>p.value == Your_Value).first();
    DropDownList1.Remove(item);
    or
    DropDownList1.Items.Remove(DropDownList1.Items.FindByValue("02"));
    

    【讨论】:

    • 而不是将其重命名为其他名称..有没有办法完全隐藏/删除它?
    • 我以为它只是第一个项目有重复,我意识到下面还有更多,我怎样才能检测到这些重复并删除它们?
    • ddl.DataSource = Seminar_ListDB.getAllSemList();@ags 之前使用ddl.Items.Clear();
    • 使用distinct 关键字例如:selecet distinct t1.name as name from table1 as t1 join table2 t2 on t1.id=t2.id
    • 试试:select distinct c.CatName from Category as c join Seminar_List as s on c.CategoryId=s.CategoryId 小提琴sqlfiddle.com/#!6/1d158/3
    【解决方案2】:

    getAllSemList() 的查询中,您可以使用DISTINCT 查询,例如:

    SELECT DISTINCT columns
    FROM table_name
    WHERE where_conditions
    

    因此,即使您的表中有多个条目,它也只会一个 该行的副本。这样,您的下拉菜单将不会多次显示相同的列值!

    编辑 1:

    您可以使用另一个查询,它不会在您的表中插入重复的条目:

    INSERT IGNORE INTO TableName (Column1, Column2) VALUES('Value1' , 'Value2')
    

    此外,如果您只有 一行 下拉菜单,那么您可以简单地通过

    进行更新
    obj.COl1 = ddl1.SelectedValue.ToString();
    obj.COL2 = ddl2.SelectedValue.ToString();
    obj.COL3 = ddl3.SelectedValue.ToString();
    

    在更新查询中,您可以将整个对象传递给仅被更新为:

    public int Update(MyClass obj){
    //update query
          UPDATE Table1 set Col1 = @col1value, Col2 = @col2value...
        WHERE *condition* 
    }
    

    编辑 2:

    Here 是您需要与包含您 CatName 的下拉列表的数据源绑定的 sql fiddle。

    查询返回CategoryNameCategoryID,你应该做的是:

    dropdown.DataTextField = "CatName";
    dropdown.DataValueField = "CategoryID";
    

    。 . . . 在更新时执行此操作,您将有一个要更新的类别 ID!

    【讨论】:

    • 它对我不起作用,有没有办法在下拉列表中隐藏该项目?
    • 查看我的更新答案。但我想看看您在getAllSemList() 中运行的查询
    • Select DISTINCT * from Seminar_List SL, Category C where SL.CategoryID=C.CategoryID
    • 我更喜欢在这里使用连接查询:SELECT DISTINCT Seminar_List.* ,Category.* FROM Seminar_List INNER JOIN Category ON Seminar_List.CategoryID = Category.CategoryID WHERE Seminar_List.CategoryID = @categoryID
    • 好的,我怎样才能得到选定的值并更新到我的数据库?我有这些代码但不起作用: List seminarList = Seminar_ListDB.getAllSemList(); Seminar_List sl = 研讨会列表[e.RowIndex]; sl.CategoryId = e.NewValues["CategoryID"].ToString();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-24
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多