我在一个datagrid中,当使用编辑时加了一个dropdownlist,我的目的是在编辑时在下拉框中进行选择,然后update,可现在的问题是,我在update时无法取得正确的值,总是取得第一个条目。
DataGrid的代码:
<Columns>
<asp:TemplateColumn HeaderText="状态" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="left">
<ItemTemplate >
<asp:Label id="lbusername" Runat =server Visible=True>
<%# DataBinder.Eval(Container,"DataItem.username")%>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="状态" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="left">
<ItemTemplate >
<asp:Label id="role" Runat =server Visible=True>
<%# DataBinder.Eval(Container,"DataItem.typename")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList Width=100px ID="ddltype" Runat="server"
DataSource ="<%# Gettypes() %>" DataTextField ="name"
DataValueField="value"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="修改状态" ItemStyle-Width="20%" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:LinkButton ID="edit" Runat="server" CommandName="edit">修改</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="save" Runat="server" commandname="update"
CommandArgument =<%# DataBinder.Eval(Container,"DataItem.id")%>
CssClass="buts">保存</asp:LinkButton>
<asp:LinkButton ID="cancel" Runat="server" commandname="cancel"
CssClass="buts">取消</asp:LinkButton>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
dropdownlist帮定的数据源:
protected DataTable Gettypes()
{
DataTable dt=new DataTable("attendancelist");
DataColumn dc=new DataColumn();
dc.ColumnName="value";
dc.DataType= System.Type.GetType("System.Int32");
dt.Columns.Add(dc);
dc=new DataColumn ();
dc.ColumnName="name";
dc.DataType= System.Type.GetType("System.String");
dt.Columns.Add(dc);
DataRow dr;
dr=dt.NewRow ();
dr["value"]=0;
dr["name"]="未考勤";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=1;
dr["name"]="正常上班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=2;
dr["name"]="值班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=3;
dr["name"]="病假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=4;
dr["name"]="事假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=5;
dr["name"]="迟到";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=6;
dr["name"]="缺席";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=7;
dr["name"]="休假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=8;
dr["name"]="上班+加班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=9;
dr["name"]="值班+加班";
dt.Rows.Add (dr);
return dt;
}
update时的代码:
private void dgAttendance_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
int Attid=Int32.Parse(e.CommandArgument.ToString ()) ;
DropDownList ddl=(DropDownList)e.Item.FindControl("ddltype");
dgos.EditItemIndex = -1;
this.BindDb ();
this.Response .Write("Attid:"+Attid+"<br>");
this.Response .Write("index:"+ddl.SelectedIndex +"<br>");
this.Response .Write("name:"+ddl.SelectedItem .Text +"<br>");
this.Response .Write("value:"+ddl.SelectedItem .Value +"<br>");
}
}
DataGrid的代码:
<Columns>
<asp:TemplateColumn HeaderText="状态" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="left">
<ItemTemplate >
<asp:Label id="lbusername" Runat =server Visible=True>
<%# DataBinder.Eval(Container,"DataItem.username")%>
</asp:Label>
</ItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="状态" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="left">
<ItemTemplate >
<asp:Label id="role" Runat =server Visible=True>
<%# DataBinder.Eval(Container,"DataItem.typename")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList Width=100px ID="ddltype" Runat="server"
DataSource ="<%# Gettypes() %>" DataTextField ="name"
DataValueField="value"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>
<asp:TemplateColumn HeaderText="修改状态" ItemStyle-Width="20%" ItemStyle-HorizontalAlign="Center">
<ItemTemplate>
<asp:LinkButton ID="edit" Runat="server" CommandName="edit">修改</asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="save" Runat="server" commandname="update"
CommandArgument =<%# DataBinder.Eval(Container,"DataItem.id")%>
CssClass="buts">保存</asp:LinkButton>
<asp:LinkButton ID="cancel" Runat="server" commandname="cancel"
CssClass="buts">取消</asp:LinkButton>
</EditItemTemplate>
</asp:TemplateColumn>
</Columns>
dropdownlist帮定的数据源:
protected DataTable Gettypes()
{
DataTable dt=new DataTable("attendancelist");
DataColumn dc=new DataColumn();
dc.ColumnName="value";
dc.DataType= System.Type.GetType("System.Int32");
dt.Columns.Add(dc);
dc=new DataColumn ();
dc.ColumnName="name";
dc.DataType= System.Type.GetType("System.String");
dt.Columns.Add(dc);
DataRow dr;
dr=dt.NewRow ();
dr["value"]=0;
dr["name"]="未考勤";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=1;
dr["name"]="正常上班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=2;
dr["name"]="值班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=3;
dr["name"]="病假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=4;
dr["name"]="事假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=5;
dr["name"]="迟到";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=6;
dr["name"]="缺席";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=7;
dr["name"]="休假";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=8;
dr["name"]="上班+加班";
dt.Rows.Add (dr);
dr=dt.NewRow ();
dr["value"]=9;
dr["name"]="值班+加班";
dt.Rows.Add (dr);
return dt;
}
update时的代码:
private void dgAttendance_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
int Attid=Int32.Parse(e.CommandArgument.ToString ()) ;
DropDownList ddl=(DropDownList)e.Item.FindControl("ddltype");
dgos.EditItemIndex = -1;
this.BindDb ();
this.Response .Write("Attid:"+Attid+"<br>");
this.Response .Write("index:"+ddl.SelectedIndex +"<br>");
this.Response .Write("name:"+ddl.SelectedItem .Text +"<br>");
this.Response .Write("value:"+ddl.SelectedItem .Value +"<br>");
}
}
解决方案 »
- 弱弱的 问下 企业通是怎么实现的 可以在线视频和语音的
- 问一个简单的ado.net问题
- 想知道:Server的Transfer/Execute 的具体用途和事例!
- HtmlInputFile的奇怪问题
- LhCMS V2.1.823(ASP.NET+C#
- 如何返回数据集合
- asp.net中怎么样实现读取服务端控件的style中的属性,如Left
- 菜鸟求助 关于数据查询的问题
- DataGrid控件中如何用CheckBox改变选中的行的颜色,请具体给出模板和CheckBox的绑定
- 一个在aspx页面里进行判断的问题
- 救命一问~~~有关SQL语句的一个问题(在线等) 当场揭帖
- 求一个JavaScript代码!!急,希望各位大佬们帮帮忙,谢谢!!
<TD>Type:</TD>
<TD>
<ASP:DROPDOWNLIST id="Type" Runat="server" width="100%" DataTextField="Text" DataValueField ="Value" DataMember ="ListType" DataSource="<%# getTypeList()%>" SelectedIndex="<%# getTypeIndex(Container.DataItem)%>">
</ASP:DROPDOWNLIST>
</TD>
//***********
protected int getTypeIndex(object item)
{
try
{
DataRowView drv=(DataRowView)item;
string val=drv["Type"].ToString();
IList list=getTypeList();
for(int i=0;i<list.Count;i++)
{
if(((ListItem)list[i]).Text.ToLower()==val.ToLower())
{
return i;
}
}
}
catch
{
return 0;
}
return 0;
}
// load data
protected IList getTypeList()
{
return QuestionnaireLogic.ListAddressType();//返回dropdownlist填充内容
}
public void Page_Load(....)
{
if(!Page.IsPostBack)
{
BindDrowDownList();
}
}
asp:DropDownList Width=100px ID="ddltype" Runat="server"
DataSource ="<%# Gettypes() %>" DataTextField ="name"
DataValueField="value"></asp:DropDownList>
不是在page-load里做的数据帮定。为什么这样每次只能取到第一个的值。
可还是不行
<asp:TemplateColumn HeaderText="状态" ItemStyle-Width="20%" HeaderStyle-HorizontalAlign="left">
<ItemTemplate >
<asp:Label id="role" Runat =server Visible=True>
<%# DataBinder.Eval(Container,"DataItem.typename")%>
</asp:Label>
</ItemTemplate>
<EditItemTemplate> <asp:DropDownList Width=100px ID="ddltype" Runat="server"></asp:DropDownList>
</EditItemTemplate>
</asp:TemplateColumn>private void dgAttendance_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl("ddltype");
ddl.DataSource=this.Gettypes ();
ddl.DataTextField="name";
ddl.DataValueField="value";
ddl.DataBind();
}
}
private void dgAttendance_UpdateCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
int Attid=Int32.Parse(e.CommandArgument.ToString ()) ;
//DropDownList ddl=(DropDownList)e.Item.FindControl("ddltype");
DropDownList ddl=(DropDownList)e.Item.Cells [2].Controls [1];
//Organize.TitleEdit (Titleid,title_name.Text );
int a=0;
for (a=0;a<=9;a++)
{
this.Response.Write (ddl.Items[a].Value.ToString () +ddl.Items [a].Selected.ToString () +"<br>");
}
this.Response .Write("Attid:"+Attid+"<br>");
this.Response .Write("index:"+ddl.SelectedIndex +"<br>");
this.Response .Write("name:"+ddl.SelectedItem .Text +"<br>");
this.Response .Write("value:"+ddl.SelectedItem .Value +"<br>");
this.Response .Write("haha:"+((DropDownList)e.Item.Cells [2].Controls [1]).SelectedItem.Value +"<br>");
dgos.EditItemIndex = -1;
this.BindDb ();
}
}
绑定datagrid的代码放到if(!IsPostBack)
private void dgAttendance_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
{
if(e.Item.ItemType==ListItemType.EditItem)
{
DropDownList ddl=(DropDownList)e.Item.FindControl("ddltype");
ddl.DataSource=this.Gettypes ();
ddl.DataTextField="name";
ddl.DataValueField="value";
ddl.DataBind();
ddl.EnableViewState=true;
//ddl.Items.FindByValue(Convert.ToString(
// DataBinder.Eval(e.Item.DataItem,"value"))).Selected=true;
}
}
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
this.dgos.EditCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgAttendance_EditCommand);
this.dgos.CancelCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgAttendance_CancelCommand);
this.dgos.UpdateCommand += new System.Web.UI.WebControls.DataGridCommandEventHandler(this.dgAttendance_UpdateCommand);
this.dgos.ItemDataBound+=new System.Web.UI.WebControls.DataGridItemEventHandler(this.dgAttendance_ItemDataBound);
this.cld .SelectionChanged += new EventHandler(this.Selection_Change);
this.BindDb ();
}
是绑定datagrid的吧
->
if(!IsPostBack)
{
this.BindDb ();
}
private void BindDb()
{
string Day=DateTime.Today .ToShortDateString ();
if (this.cld .SelectedDate .ToShortDateString ()!="0001-1-1")
{
Day=this.cld.SelectedDate .ToShortDateString ();
}
this.dt=Attendance.GetDailylistall (Day);
this.dgos .DataSource =this.dt ;
this.dgos .DataBind ();
}