我是一个大二学生,放假在学ASP.NET,写DataGird的时候遇到一点问题,想请教一下。
我的问题其实在CSDN上有过文档介绍,我按提供的文档,模仿着写下来,但每次都不能正确的把DropDownList绑定。
大家能帮我看看问题出在那里吗?谢谢!
 
public String [] strIsDone = new String[2] {"未完成", "已完成"};
 
private void Page_Load(object sender, System.EventArgs e)
  {
   // 在此处放置用户代码以初始化页面
   if(!(Page.IsPostBack))
   {
    this.LoadData(strCmd);
    this.UpdateView();
    
   }
   
  } 
 
  private void LoadData(string str)
  {
   SqlConnection conn=new SqlConnection(strConn);
   SqlDataAdapter da=new SqlDataAdapter(str,conn);
   DataSet ds=new DataSet();
   da.Fill(ds,"RepairRecord");
   Session["Repair"]=ds;
  }
 
  private void UpdateView()
  {
   DataSet ds=(DataSet)Session["Repair"];
   grid.DataSource=ds.Tables["RepairRecord"];
   grid.DataBind();
 }
 
 public void ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
  { 
   if(e.Item.ItemType == ListItemType.EditItem)//每次只能绑定到strIsDone数组的的第一个元素上
   {
    DataRowView drv = (DataRowView)e.Item.DataItem;
    String currentRole = drv["IsDone"].ToString();
    DropDownList ddlTemp=(DropDownList) e.Item.FindControl("ddlIsDone");
    ddlTemp.SelectedIndex = ddlTemp.Items.IndexOf(ddlTemp.Items.FindByText(currentRole));
   }
}
 
public void EditCommand(object sender, System.Web.UI.WebControls.DataGridCommandEventArgs e)
  {
   grid.EditItemIndex=e.Item.ItemIndex;
   this.UpdateView(); 
}  
<asp:TemplateColumn HeaderText="完成"><ItemStyle Wrap="False" HorizontalAlign="Center"VerticalAlign="Middle">
</ItemStyle>
<ItemTemplate>
<asp:Label id=lblIsDone runat="server" Width="72px" Text='<%# DataBinder.Eval(Container, "DataItem.IsDone")%'></asp:Label> </ItemTemplate><EitItemTemplate>
<asp:DropDownList id=ddlIsDone runat="server" Width="88px" DataSource="<%# strIsDone %>">//绑定到string数组中
</asp:DropDownList></EditItemTemplate></asp:TemplateColumn>加上断点调试后,发现数据是正确绑定的,即当 String currentRole = drv["IsDone"].ToString()中,currentRole显示正确的值。执行DropDownList ddlTemp=(DropDownList) e.Item.FindControl("ddlIsDone")时,会自动把selectIndex设为0,即绑定到“未完成”上。 ddlTemp.SelectedIndex = ddlTemp.Items.IndexOf(ddlTemp.Items.FindByText(currentRole))完全不起作用。我甚至把 ddlTemp.SelectedIndex = ddlTemp.Items.IndexOf(ddlTemp.Items.FindByText(currentRole))改为if(currentRole=="未完成") ddlTemp.SelectedIndex=0;else ddlTemp.SelectedIndex=1,也不起作用。但如果直接改为ddlTemp.SelectedIndex=1,则永远绑定到“已完成”上,请问是何原因。大家帮忙想想!!!!

解决方案 »

  1.   

    UP,写得太多,没时间看,
    改天吧,
    今天正忙,友情UP
      

  2.   

    改成grid.DataSource=ds.Tables["RepairRecord"].DefaultView;行不行啊
      

  3.   

    你看看currentRole的值和ddlTemp的选中值是什么
      

  4.   

    写的太多跟本没有时间看
    记住原理自己调去把
    dropdownlist的帮定和dataGrid绑定是一样的只要把ID换一下就行了
    关键是在木板列中dropdownlist的数据源的设置要在html代码中设置!
      

  5.   

    加DefaultView还是不行。
    currentRole的值可以正确绑定,但ddlTemp的selectedIndex却不能正确绑定,每次默认0。
    大家再帮忙看看!!!!
      

  6.   

    (e.Item.ItemType == ListItemType.EditItem)
    改为if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
    应该就可以了
      

  7.   

    ddlTemp在绑定的时候最好加上DataTextField和DataValueField。这样在FindByText的时候才能正确找到