gridview中的下拉列表编辑模式中的重复项

时间:2015-03-28 19:49:01

标签: c# asp.net gridview

我试图在编辑模式下使用下拉列表填充我的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();
        }
    }

2 个答案:

答案 0 :(得分:0)

使用:

  
    

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";

从DropDownList隐藏项目:

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

答案 1 :(得分:0)

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

SELECT DISTINCT columns
FROM table_name
WHERE where_conditions

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

编辑1:

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

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

此外,如果您只有一行的dropwdowns,那么您只需按

进行更新
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小提琴。

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

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

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