GridView中的DropDownList实现下拉菜单,如何在进入编辑页面时下拉菜单显示的是数据库中的值,不要默认值 15

如何在进入编辑页面时下拉菜单显示的是数据库中的值,不要默认值Selected的菜单里面的值。后台的管理员修改用户信息,比如说把用户注册时是“未激活”,后台修改成“激活”。... 如何在进入编辑页面时下拉菜单显示的是数据库中的值,不要默认值Selected的菜单里面的值。
后台的管理员修改用户信息,比如说把用户注册时是“未激活”,后台修改成“激活”。现在表doc_t中userstatus字段我都改成了“激活”了,按照我的代码应该是点编辑时,每行的默认选项都是数据表中的值也就是应该在“激活”项。下拉表中默认选择的是“未激活”,但是现在问题是编辑第一行时选项停在“激活”(正常),编辑第二行就停在“未激活”(不正常),第三行又停在“激活”(正常),第四行又停在“未激活”(不正常),隔一行一变,为什么出现这个问题,帮我看下代码错在哪里,谢谢了各位高手。
前台代码:
<asp:TemplateField HeaderText="用户状态">
<ItemTemplate>
<%# Eval("userstatus") %>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList runat="server" ID="changeuserstatus">
<asp:ListItem Selected="True" Value="未激活">未激活</asp:ListItem>
<asp:ListItem Value="激活">激活</asp:ListItem>
</asp:DropDownList>
</EditItemTemplate>
</asp:TemplateField>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
this.BindGridView();
}

private void BindGridView()
{
OracleConnection con = 省略
//获取doc
string sql = "SELECT * FROM doc_t";
OracleDataAdapter oda = 省略
//填充DataSet
DataSet ds = new DataSet();
oda.Fill(ds);
this.BindTable = ds.Tables[0];//这句不太清楚应该和下面的方法是相同的
//数据绑定
this.GridView1.DataSource = ds;
this.GridView1.DataBind();
}

protected DataTable BindTable //这个放法也不太清楚意思
{
get { return (ViewState["BindTable"] as DataTable); }
set { ViewState["BindTable"] = value; }
}

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//判断当前数据绑定完成的数据行是否处于编辑状态
if (e.Row.RowState == DataControlRowState.Edit)
{
//获取编辑项模板中的DropDownList控件
DropDownList ddluserstatus = e.Row.FindControl("changeuserstatus") as DropDownList; ;
//根据都doc_t表中的用户状态设定DropDownList中的选中项索引
ddluserstatus.SelectedIndex = this.BindTable.Rows[e.Row.RowIndex]["userstatus"].ToString() == "未激活" ? 0 : 1; //(表名doc_t,字段名字是userstatus)
return;
}
return;
}
//下面是编辑的函数
protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//获取当前编辑行
GridViewRow row = this.GridView1.Rows[e.RowIndex];
//获取行当中的TextBox控件中的值
string changeuserstatus = (this.GridView1.Rows[e.RowIndex].FindControl("changeuserstatus") as DropDownList).SelectedItem.Value; ;
1楼说的貌似是问题所在,我在这里加了方法输出
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
//判断当前数据绑定完成的数据行是否处于编辑状态
if (e.Row.RowState == DataControlRowState.Edit)
{
//获取编辑项模板中的DropDownList控件
DropDownList ddluserstatus = e.Row.FindControl("changeuserstatus") as DropDownList;
ddluserstatus.SelectedIndex = this.BindTable.Rows[e.Row.RowIndex]["userstatus"].ToString() == "未激活" ? 0 : 1;

//return;
}
return;
}

现在报错了
ddluserstatus.SelectedIndex = this.BindTable.Rows[e.Row.RowIndex]["userstatus"].ToString() == "未激活" ? 0 : 1;
这行的错误是:
Void GridView1_RowDataBound(System.Object, System.Web.UI.WebControls.GridViewRowEventArgs)
未将对象引用设置到对象的实例。
展开
 我来答
snowleung
2011-02-17 · TA获得超过192个赞
知道小有建树答主
回答量:256
采纳率:100%
帮助的人:252万
展开全部
ddluserstatus.SelectedIndex = (this.BindTable.Rows[e.Row.RowIndex]["userstatus"]==null?"未激活":this.BindTable.Rows[e.Row.RowIndex]["userstatus"].ToString()) == "未激活" ? 0 : 1;

程序逻辑有没有错我不知道,但是如上面这样做可以解决“未将对象引用设置到对象的实例。”这个问题。

参考资料: http://hi.baidu.com/snowleung

tieniu116
2011-02-16 · TA获得超过186个赞
知道小有建树答主
回答量:485
采纳率:0%
帮助的人:240万
展开全部
给你个简单的思路;我在DropDownList 边上放一个label设置为隐藏,可以通过label的值来控制DropDownList 的选项
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yi_mzy
2011-02-15 · 超过34用户采纳过TA的回答
知道答主
回答量:143
采纳率:0%
帮助的人:65.4万
展开全部
protected DataTable BindTable 这里只是保存了一个变量的意思,
你调试一下ddluserstatus.SelectedIndex = this.BindTable.Rows[e.Row.RowIndex]["userstatus"].ToString() == "未激活" ? 0 : 1; 这一段吧,应该可以找出问题所在,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
imgej32
2011-02-16 · TA获得超过133个赞
知道答主
回答量:123
采纳率:0%
帮助的人:0
展开全部
不变的方法 就是 先找到控件control 转化为dropdownlist 读取数据 更新数据库
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式