如何取得gridview 中dropdownlist选中项?其中dropdownlist控件是通过rowdatabind方法附加上的,现在想取得去选中值,不知怎么获取,请指点、。
绑定方法: protected void personalpaiban_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{ //添加dropdownlist,并给其赋值
if (e.Row.RowIndex >= 0)
{
for (int i = 2; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString(); ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
//把原表中数据通过dropdownlist反映出来
ddl.SelectedIndex = Convert.ToInt32(e.Row.Cells[i].Text.ToString()) - 1; e.Row.Cells[i].Controls.Add(ddl);
}
}
}
}
绑定方法: protected void personalpaiban_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{ //添加dropdownlist,并给其赋值
if (e.Row.RowIndex >= 0)
{
for (int i = 2; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString(); ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
//把原表中数据通过dropdownlist反映出来
ddl.SelectedIndex = Convert.ToInt32(e.Row.Cells[i].Text.ToString()) - 1; e.Row.Cells[i].Controls.Add(ddl);
}
}
}
}
解决方案 »
- 请问,DataRow这些知识不太懂
- WPF如何将分割后的字符串显示在listview中
- 请问,常用的类名有哪些
- HttpWebRequest请求异常
- 熟悉正则的帮忙看看这个正则表达式
- 熟悉RepositoryItemComboBox高人帮帮忙
- 如何编程实现将Excel表数据导入SQL Server 2000数据库
- 如何编程得到数据库的建库、建表语句?请高手给个提示!
- C# combox控件默认F4键下拉,请教如何在代码中屏掉此功能.(在线等)
- 问两个关于更方便地在文本框中提交数据的实现方法
- 求在后台发送url访问另一个网站,返回xml文件页面,我们在后台读取数据
- 为什么这个update没有成功?
string a1 = DropDownList1.SelectedValue;大致是这样的。。你需要看实际情况 改Rows[i]中的i 和你动态生成的dropdownlist的ID
那这样的话就是rowcommand里:DropDownList DDL = (DropDownList)e.Row.FindControl("DropDownList1");
string a1 = DropDownList1.SelectedValue;
类似写法
上面的都说清楚了,偶来接分。最好用DropDownList的名。
<asp:DropDownList ID="ddlSort" runat="server" Width="98%">
</asp:DropDownList>
<asp:HiddenField ID="Hd_Sort" runat="server" Value='<%# Eval("BalSort")%>' />
</ItemTemplate>
protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex != -1)
{ if (e.Row.RowState == DataControlRowState.Edit || e.Row.RowState == (DataControlRowState.Alternate | DataControlRowState.Edit))
{
((DropDownList)e.Row.FindControl("ddlSort")).SelectedValue = ((HiddenField)e.Row.FindControl("Hd_Sort")).Value;
}
}
} protected void gv_RowEditing(object sender, GridViewEditEventArgs e)
{
gv.EditIndex = e.NewEditIndex;
string strSort = ((DropDownList)gv.Rows[e.NewEditIndex].FindControl("ddlSort")).SelectedValue.Trim();
gv.EditIndex = -1;
BindData();
}
代码如下: protected void gvpaiban_RowCommand(object sender, GridViewCommandEventArgs e)
{
Response.Write("<script>alert('" + gvpaiban.Rows.Count + "sdfsadf" + gvpaiban.Columns.Count + "')</script>");
if (e.CommandName == "updates")
{
string userid = e.CommandArgument.ToString();//得到主键id
GridViewRow row = (GridViewRow)((Control)e.CommandSource).Parent.Parent;
Response.Write("<script>alert('"+gvpaiban.Rows.Count+"sdfsadf"+gvpaiban.Columns.Count+"')</script>");
for (int i = 3; i < gvpaiban.Columns.Count; i++)
{
//得到列标题
string date = gvpaiban.Columns[i].HeaderText;
//得到单元格中dropdownlist选中值
//获的单元格中dropdownlist的id
int j = i - 2;
string ddlid = "DropDownList" + j.ToString();
DropDownList ddl = (DropDownList)row.FindControl(ddlid);
int bz = ddl.SelectedIndex + 1;
Response.Write("<script>alert('"+bz+"')</script>");
}
}
}
结果出现问题,gridview的列才有1列,也就是只有按钮列,其他动态生成的都没有,更别提取得dropdownlist了,请各位帮忙想一下解决办法。。
在Page_Load中再要创建DropDownList,如:
protected void Page_Load(object sender, EventArgs e)
{
if (IsPostBack)//回发(没有!号
{
for (int j = 0; j < gvpaiban.Rows.Count; j++)
{
for (int i = 2; i < gvpaiban.Columns.Count; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString(); ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
gvpaiban.Rows[j].Cells[i].Controls.Add(ddl);
// ddl.SelectedIndex = .......
}
}
}
} //gvpaiban的RowCommand中获得选中值
protected void gvpaiban_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
Button btn =(Button)e.CommandSource;
int index = ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
string ddlItem = "";
for (int i = 2; i < gvpaiban.Columns.Count; i++)
ddlItem += ((DropDownList)gvpaiban.Rows[index].Cells[7].FindControl("DropDownList" + i.ToString())).SelectedItem.ToString() + ",";
Response.Write(ddlItem);//这就是你要的值
}
}
ddlItem += ((DropDownList)gvpaiban.Rows[index].Cells[i].FindControl("DropDownList" + i.ToString())).SelectedItem.ToString() + ",";
还是不行,因为gvpaiban的列,还是一列,gvpaiban_RowCommand中
for (int i = 2; i < gvpaiban.Columns.Count; i++)
ddlItem += ((DropDownList)gvpaiban.Rows[index].Cells[7].FindControl("DropDownList" + i.ToString())).SelectedItem.ToString() + ",";
Response.Write(ddlItem);//这就是你要的值for循环根本就没有执行,恳求各位支持。。
gvpaiban.Columns.Count是多少!我昨天做了一下完全没问题!
动态添加控件的关键是页面回发还要重新创建!
其他应该没什么两样!!
这是网上的解释:
GridView.Columns.Count,莫大的一个0跃然纸上,开始当然是以为自己的代码有问题,反复检查后,确信一点问题都没有,驱猫上网百一下和G一下,发现遇到这个问题的朋友还不少.原来服务器端DataSet或者DateTbale之流绑定给GridView之后,GridView只会按照字段的顺序显示所有列,此时无论GridView的AutoGenerateColumns属性启用还是不启用,Columns对象的Count将为0,因为GridView还是会自动生成的列,而自动生成列是不会放入到Columns集合中去的.
数据库中数据如下所示:希望得到如题所示的效果
因为你是代码绑定,直接不能获得Columns.Count,
但可以通过以下的方法获得,
加一个隐藏域放Columns.Count,然后再IsPostBack中调用
protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex == 0)
{
TableCellCollection cells = e.Row.Cells;
HiddenField1.Value = cells.Count.ToString();//这是Columns.Count
}
}
if (IsPostBack)//回发(没有!号
{ int colnum = Convert.ToInt32(((HiddenField)gvpaiban.Rows[0].FindControl("HiddenField1")).Value);//获得隐藏域值
for (int j = 0; j < gvpaiban.Rows.Count; j++)
{
for (int i = 2; i <colnum; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString(); ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
gvpaiban.Rows[j].Cells[i].Controls.Add(ddl);
// ddl.SelectedIndex = .......
}
}
}
蓝色部分出错
/// 在创建行时添加
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void personalpaiban_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowIndex == 0)
{
TableCellCollection cells = e.Row.Cells;
HiddenField HiddenField1 = new HiddenField();//获得的hiddenfiled对象
HiddenField1.Value = cells.Count.ToString();//这是Columns.Count
} }
添加隐藏域不是这样添加吗?如果没有第二句的话,提示没有找到HiddenField1,同样如果获得HiddenField1,只用Convert.ToInt32(HiddenField1.Value)
也会提示没有找到HiddenField1
拖一个隐藏域的控件就可以了!
或者用ViewState也可以,总之是保存一下数据!!
//gvpaiban的RowCommand中获得选中值
protected void gvpaiban_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Update")
{
Button btn =(Button)e.CommandSource;
int index = ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
string ddlItem = "";
for (int i = 2; i < gvpaiban.Columns.Count; i++)
ddlItem += ((DropDownList)gvpaiban.Rows[index].Cells[i].FindControl("DropDownList" + i.ToString())).SelectedItem.ToString() + ",";
Response.Write(ddlItem);//这就是你要的值
}
}提示未将对象引用设置到对象的实例。。
int index = ((GridViewRow)btn.NamingContainer).RowIndex;//获得行号
//string ddlItem = "";
//for (int i = 2; i < colnum; i++)
// ddlItem += ((DropDownList)personalpaiban.Rows[index].Cells[i].FindControl("DropDownList" + i.ToString())).SelectedItem.ToString() + ",";
//Response.Write("<script>alert('"+ddlItem+"');</script>");//这就是你要的值
string bz = personalpaiban.Rows[index].Cells[3].Text;
Response.Write("<script>alert('" + bz + "');</script>");
可以取得dropdownlist位置处原来的值,是不是因为我的dropdownlist是rowdatabound添加上去的缘故啊。
大哥,帮忙看看啊,我这真的取不到dropdownlist的值,试了很多次了,还是不行。。
前提是GridView的列没有手动绑定!
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
if ((e.Row.RowState == DataControlRowState.Edit) || (e.Row.RowState ==( DataControlRowState.Edit | DataControlRowState.Alternate)))
{
for (int i = 2; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString(); ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
e.Row.Cells[i].Controls.Add(ddl);
ddl.SelectedIndex = Convert.ToInt32(((TextBox)e.Row.Cells[i].Controls[0]).Text);//在编辑状态下是TextBox
((TextBox)e.Row.Cells[i].Controls[0]).Visible = false;//隐藏编辑状态下的TextBox
}
}
else if (e.Row.RowState == DataControlRowState.Normal | e.Row.RowState == DataControlRowState.Alternate)
{
for (int i = 2; i < e.Row.Cells.Count; i++)
{
DropDownList ddl = new DropDownList();
ddl.ID = "DropDownList" + i.ToString();
ddl.Items.Add(new ListItem("早", "1"));
ddl.Items.Add(new ListItem("中", "2"));
ddl.Items.Add(new ListItem("晚", "3"));
ddl.Items.Add(new ListItem("休", "4"));
//把原表中数据通过dropdownlist反映出来
e.Row.Cells[i].Controls.Add(ddl);
ddl.SelectedIndex = Convert.ToInt32(e.Row.Cells[i].Text.ToString());
}
}
}
}