在DataGrid中绑定的模板列"类型"表取的是数据库中的表,为什么运行后点击编辑列,类型列表总是有重复的数据绑定,我用了许多方法都不行,怎么回事?
页面文件:
<asp:TemplateColumn HeaderText="类型">
<ItemTemplate>
<asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.class") %>'>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="ddlClassType"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
CS文件:我用ddlCurrentClass.Items.Count==0,ddlCurrentClass.Items.Clear()都不行?运行后列表的数据总是重复取出来添加的?
if(e.Item.ItemType==ListItemType.EditItem)
{
DataRowView drv = (DataRowView)e.Item.DataItem;
string current = drv["Department"].ToString();
strSql="SELECT ClassID,Class FROM tblClass ORDER BY ClassID";
con=new SqlConnection(Session["SQLCONNECTION"].ToString());
scm=new SqlCommand(strSql,con);
sda=new SqlDataAdapter(scm);
sda.Fill(ds,"class");
ddlCurrentClass.DataSource=ds.Tables["class"].DefaultView;
ddlCurrentClass.DataTextField="Class";
ddlCurrentClass.DataValueField="ClassID";
ddlCurrentClass.DataBind();
ddlCurrentDept.SelectedIndex
 = ddlCurrentDept.Items.IndexOf(ddlCurrentDept.Items.FindByText(current));
}

解决方案 »

  1.   

    你是加在Page_Load()事件里的吗?那就加个判断if(!IsPostBack)
    {
        //你的绑定
    }
      

  2.   

    不行呀!我是加在这个里面的数据绑定,还是有重复的列表?真是急人?
    private void grdMxz_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {
    if(e.Item.ItemType==ListItemType.EditItem)
    {
    DataRowView drv = (DataRowView)e.Item.DataItem;
    string current = drv["Department"].ToString();
    strSql="SELECT ClassID,Class FROM tblClass ORDER BY ClassID";
    con=new SqlConnection(Session["SQLCONNECTION"].ToString());
    scm=new SqlCommand(strSql,con);
    sda=new SqlDataAdapter(scm);
    sda.Fill(ds,"class");
    ddlCurrentClass.DataSource=ds.Tables["class"].DefaultView;
    ddlCurrentClass.DataTextField="Class";
    ddlCurrentClass.DataValueField="ClassID";
    ddlCurrentClass.DataBind();
    ddlCurrentDept.SelectedIndex
     = ddlCurrentDept.Items.IndexOf(ddlCurrentDept.Items.FindByText(current));
    }
    }
      

  3.   

    SELECT ClassID,Class FROM tblClass where Classid in (select distinct Classid from tblClass)
      

  4.   

    SELECT tblClass.ClassID,tblClass.Class FROM tblClass inner join (select distinct Classid from tblClass) a on a.Classid  = tblClass.Classid这个应该可以了 
    下面这一个也应该可以SELECT ClassID,Class FROM tblClass  group by classid,classok了,数据处理最好在数据提取的时候完成
      

  5.   

    不对呀,我的数据库中的数据没有重复,把它放在DataGrid之外,就正常的显示一个列表.为何绑定在里面就重复了呢?是不是这里面有问题:if(e.Item.ItemType==ListItemType.EditItem),我用e.Item.ItemType==ListItemType.Item||e.Item.ItemType==ListItemType.AlternatingItem,又找不到对象了,究竟是什么原因?
      

  6.   

    在第一次绑定的时候出现重复的话,就是你数据库选取时候的问题了,SELECT ClassID,Class FROM tblClass  group by classid,class 可以解决。你调试跟踪一下,很可能你绑定了2次
      

  7.   

    DataGrid1.AutoGenerateColumns = false;
      

  8.   

    重复了两次,也就是说列表绑定了两次,如果改成下面的,先是绑定两次,然后是每点击一行就重复增加一次数据绑定,真是怪了!
    if(e.Item.ItemType==ListItemType.EditItem)
    {
    DataRowView drv = (DataRowView)e.Item.DataItem;
    string current = drv["Department"].ToString();
    ddlCurrentClass.DataSource=GetDataSet().Tables["class"].DefaultView;;
    ddlCurrentClass.DataTextField="Class";
    ddlCurrentClass.DataValueField="ClassID";
    ddlCurrentClass.DataBind();
    ddlCurrentDept.SelectedIndex
     = ddlCurrentDept.Items.IndexOf(ddlCurrentDept.Items.FindByText(current));
    }
      

  9.   

    在绑定之前先
    ddlCurrentClass.Items.Clear()
    试试
      

  10.   

    还是不行呀,还是绑了两次?我用模板列DataSour=<#% CreateClass() %>,也有这个现象!
      

  11.   

    重新试了一下,绑定之前清空列表,终于搞定,感谢大家,等一下给分.
    ddlCurrentClass.Items.Clear();
    ddlCurrentClass.DataBind();
      

  12.   

    DataGrid1.AutoGenerateColumns = false;