我是一个大二学生,放假在学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,则永远绑定到“已完成”上,请问是何原因。大家帮忙想想!!!!
我的问题其实在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,则永远绑定到“已完成”上,请问是何原因。大家帮忙想想!!!!
改天吧,
今天正忙,友情UP
记住原理自己调去把
dropdownlist的帮定和dataGrid绑定是一样的只要把ID换一下就行了
关键是在木板列中dropdownlist的数据源的设置要在html代码中设置!
currentRole的值可以正确绑定,但ddlTemp的selectedIndex却不能正确绑定,每次默认0。
大家再帮忙看看!!!!
改为if(e.Item.ItemType==ListItemType.Item || e.Item.ItemType==ListItemType.AlternatingItem)
应该就可以了