asp.net gridview dropdownlist selectedvalue问题,望老手来看看

fuzongfan1 2010-12-06 03:02:15
嵌套的dropdownlist 有自己的数据源
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
UserImputShief uis = new UserImputShief();
uis.InitDDLAsNum();
ddl.DataSource = uis.GetDataSet;
ddl.DataValueField = "AssetIFlag";
ddl.DataTextField = "AssetName";
ddl.DataBind();
}

但是gridview绑定数据库的数据时候 就不能选定到数据库的值。
<asp:TemplateField HeaderText="内部标识">
<ItemTemplate>
<asp:DropDownList ID="DDLAsiflag" runat="server" DataValueField='<%Bind("AssetIFlag")%>' OnSelectedIndexChanged="DDLAsiflag_SelectedIndexChanged" AutoPostBack ="true" ></asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>

现在我如何让dropdownlist 自动选择到数据库里的值?
...全文
288 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
追加10分给(G.X) ,人真的不错哦。
mimangshamo 2010-12-06
  • 打赏
  • 举报
回复
你这需求是不是在Gridview的行绑定的时候你要给每行的一个DropDownList绑定数据,并且选择应该选择的项。

大概写一下代码:

if (e.Row.RowType == DataControlRowType.DataRow)
{
// 循环要绑定DropDownList的数据源
foreach (DataRow row in uis.GetDataSet.Table[0].Rows)
{
ListItem item =new ListItem();
item.Text="显示文本";
item.Value=row["数据项"];
if(row["数据项"]==本行GridView的这个值)
item.Selected=true;
ddl.Items.Add(item);
}
}
Gary_cn 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 gary_cn 的回复:]

把前台的 DataValueField='<%Bind("AssetIFlag")%>' 删掉,

在前台不需要给ddl付值,在RowDataBound里面找倒每行的dll,给dll绑定数据

然后取得当前行的[AssetIFlag]值,给ddl.SelectedValue 设定上就行了啊!
[/Quote]
不能直接在[数据源dt]里面取得,因为如果有分页的话,GridView的index和dt里面的index是不同的,

你可以在前台再多绑定一个隐藏列,就绑定[AssetIFlag]这个数据

然后e.Rows[e.Row.RowIndex].Cells[隐藏列的列index].text 取得当前行的[AssetIFlag]数据,不过还是下面这个简单
DataRowView drv = (DataRowView)e.Row.DataItem;//这句就是,gridview当前行对应绑定数据dt里面的资料行,只要你[数据源dt]里面有AssetIFlag这一列,下面 drv["AssetIFlag"]就可以取得AssetIFlag值
ddl.SelectedValue = drv["AssetIFlag"].ToString();
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
懂了,谢谢。一会没转过弯来。
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
DataRowView drv = (DataRowView)e.Row.DataItem;
这行看不懂
数据源是个datatable用下面这个搞定了。

int rowindex=e.Row.RowIndex
string aa=dt.Rows[rowindex]["AssetIFlag"].tostring();
ddl.selectedvalue=aa;
孟子E章 2010-12-06
  • 打赏
  • 举报
回复
DataRowView drv = (DataRowView)e.Row.DataItem;
ddl.SelectedValue = drv["AssetIFlag"].ToString();

不是给你写出来了吗?什么看不懂的a啊?

这样写更保险
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 fuzongfan1 的回复:]
引用 11 楼 gary_cn 的回复:
引用 8 楼 fuzongfan1 的回复:

if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
string aa = ddl.DataValueField.T……
[/Quote]像7楼DataRowView drv = (DataRowView)e.Row.DataItem;
ddl.SelectedValue = drv["AssetIFlag"].ToString();

我看不懂。只能是
int rowindex=e.Row.RowIndex
数据源dt
string aa=dt.Rows[rowindex]["AssetIFlag"].tostring();
ddl.selectedvalue=aa;
Gary_cn 2010-12-06
  • 打赏
  • 举报
回复
把前台的 DataValueField='<%Bind("AssetIFlag")%>' 删掉,

在前台不需要给ddl付值,在RowDataBound里面找倒每行的dll,给dll绑定数据

然后取得当前行的[AssetIFlag]值,给ddl.SelectedValue 设定上就行了啊!
孟子E章 2010-12-06
  • 打赏
  • 举报
回复
DataValueField又不是SelectedValue 属性啊。
<%Bind("AssetIFlag")%>只有一个值,不是多个选项啊,

所以,你要在绑定事件里处理啊
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 gary_cn 的回复:]
引用 8 楼 fuzongfan1 的回复:

if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
string aa = ddl.DataValueField.ToString();
……


為什……
[/Quote]的确是有个AssetIFlag,但是数据源已经绑定到gridview了,也就是asp:DropDownList ID="DDLAsiflag" runat="server" DataValueField='<%Bind("AssetIFlag")%>'

已经有值了,拿这个值到aa,再ddl.SelectedValue = aa;不可行吗?7楼说的那个方法还需要到数据源拿数据,我会先试试看行不行。
Gary_cn 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 fuzongfan1 的回复:]

if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
string aa = ddl.DataValueField.ToString();
……
[/Quote]

為什麼要寫︰string aa = ddl.DataValueField.ToString();
你应该要取得当前资料行的 [AssetIFlag]栏位在资料库中的值才对,像7楼写的:

//如果你绑定GridView的数据源中有AssetIFlag列
DataRowView drv = (DataRowView)e.Row.DataItem;
ddl.SelectedValue = drv["AssetIFlag"].ToString();
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 net_lover 的回复:]
直接设置ddl.SelectedValue = "值";可能会出错,你可以这样
ListItem x = ddl.Items.FindByValue("xxx");
if(x!=null) x.Selected=true;
[/Quote]

问题就在于<asp:DropDownList ID="DDLAsiflag" runat="server" DataValueField='<%Bind("AssetIFlag")%>'
你说的XXX就是这个绑定的值。
Gary_cn 2010-12-06
  • 打赏
  • 举报
回复
7樓 yes
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
string aa = ddl.DataValueField.ToString();
UserImputShief uis = new UserImputShief();
uis.InitDDLAsNum();
ddl.DataSource = uis.GetDataSet;
ddl.DataValueField = "AssetIFlag";
ddl.DataTextField = "AssetName";
ddl.DataBind();

ddl.SelectedValue = aa;
}

这样也不行
IHandler 2010-12-06
  • 打赏
  • 举报
回复
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
UserImputShief uis = new UserImputShief();
uis.InitDDLAsNum();
ddl.DataSource = uis.GetDataSet;
ddl.DataValueField = "AssetIFlag";
ddl.DataTextField = "AssetName";
ddl.DataBind();

//如果你绑定GridView的数据源中有AssetIFlag列
DataRowView drv = (DataRowView)e.Row.DataItem;
ddl.SelectedValue = drv["AssetIFlag"].ToString();

}
孟子E章 2010-12-06
  • 打赏
  • 举报
回复
直接设置ddl.SelectedValue = "值";可能会出错,你可以这样
ListItem x = ddl.Items.FindByValue("xxx");
if(x!=null) x.Selected=true;
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
ddl.selectedvalue=ddl.DataValueField.tostring() 是不行的,想破头也没想出来
IHandler 2010-12-06
  • 打赏
  • 举报
回复
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
UserImputShief uis = new UserImputShief();
uis.InitDDLAsNum();
ddl.DataSource = uis.GetDataSet;
ddl.DataValueField = "AssetIFlag";
ddl.DataTextField = "AssetName";
ddl.DataBind();

ddl.SelectedValue = "值";

}
fuzongfan1 2010-12-06
  • 打赏
  • 举报
回复
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.FindControl("DDLAsiflag");
UserImputShief uis = new UserImputShief();
uis.InitDDLAsNum();
ddl.DataSource = uis.GetDataSet;
ddl.DataValueField = "AssetIFlag";
ddl.DataTextField = "AssetName";
ddl.DataBind();
}
这个就是RowDataBound里的,问题不知道如何设置
我设置ddl.selectedvalue=???
IHandler 2010-12-06
  • 打赏
  • 举报
回复
在绑定数据的后面
ddl.SelectedValue = "值";
加载更多回复(1)

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧