首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • Gridview下的DropDownList问题,很郁闷. [已结帖,结帖人:itcoo]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    • 结帖率:
    发表于:2008-08-22 04:43:34 楼主
    GridView中的第条数据行都绑定了一个DropDownList,要取得DropDownList所在行的SelectedValue和DataKeys的值.
    本来已经实现了.后来不记得改动了哪里又不能实现了.很郁闷.请各位指点一下.
    /////////////////////////////////////
    <asp:TemplateField>
        <ItemTemplate>
            <asp:DropDownList ID="ddlSubCht" runat="server" DataSourceID="objSubCht" DataTextField="SubName" DataValueField="SubId" AutoPostBack="True" OnSelectedIndexChanged="ddlSubCht_SelectedIndexChanged" >
            </asp:DropDownList>
        </ItemTemplate>
    </asp:TemplateField>
    ////////////////////////////////////
    C# code
    protected void ddlSubCht_SelectedIndexChanged(object sender, EventArgs e) { for (int i = 0; i < gvCategories.Rows.Count; i++) { DropDownList ddl = (DropDownList)gvCategories.Rows[i].FindControl("ddlSubCht");//问题1:在Debug下发现不能找到控件 int ddlint = Convert.ToInt32(ddl.SelectedValue);//问题2:提示"未将对象引用设置到对象的实例" int key = (int)gvCategories.DataKeys[i].Value;//问题3:总是返回的同一个值.我想返回的是每行对应的DataKeys lbl.Text= ddlint+"_"+key+"_"+isSingle.ToString();//输出 } }
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • bhtfg538
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 07:44:241楼 得分:1
    LZ是不是少了他的Cell【】
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:09:212楼 得分:0
    不是Cell的问题.已经试过了
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • dotnetsong
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 08:59:533楼 得分:1
    方法位置不对吧
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • QQQQAnnie
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:06:404楼 得分:1
    1,方法位置不对
    2,确实少cell[]
    你不精确到单元格是找不到控件的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • include_me
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:18:325楼 得分:10
    C# code
    protected void ddlSubCht_SelectedIndexChanged(object sender, EventArgs e) { DropDownList ddl = (DropDownList)sender; int ddlint = Convert.ToInt32(ddl.SelectedValue); int key = (int)gvCategories.DataKeys[(ddl.Parent as GridViewRow).RowIndex].Value; .. }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • qq13237810775
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:26:366楼 得分:0
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • hy_lihuan
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:28:277楼 得分:1
    C# code
    foreach (GridViewRow row in this.GvCaseApplyList.Rows) { CheckBox chkPunish = (CheckBox)row.FindControl("chkCaseApply"); id=this.GvCaseApplyList.DataKeys[row.RowIndex][1].ToString(); }

    第一个问题,就是没有找到控件啊;
    第二个问题,编码习惯不好,在FindControl以后,都要做是否null的检测的;
    第三个问题:看上面代码;
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • huguang2yq
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:30:018楼 得分:1
    DropDownList ddl = (DropDownList)gvCategories.Rows[i].FindControl("ddlSubCht");//问题1:在Debug下发现不能找到控件
      定位不对吧....你这对应的是第几行...单元格呢?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • zhulinghappy
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:33:089楼 得分:1
    DropDownList ddl = gvCategories.Rows[i].FindControl("ddlSubCht") as DropDownList;//

    另外还要精确到cell
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xuexiziji
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:37:5910楼 得分:1
    引用 5 楼 include_me 的回复:
    C# code
    protected void ddlSubCht_SelectedIndexChanged(object sender, EventArgs e)
    {
      DropDownList ddl = (DropDownList)sender;
      int ddlint = Convert.ToInt32(ddl.SelectedValue);
      int key = (int)gvCategories.DataKeys[(ddl.Parent as GridViewRow).RowIndex].Value;
      ..
    }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • chinaicm
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:42:0311楼 得分:1

    DropDownList ddl = (DropDownList)gvCategories.Rows[i].FindControl("ddlSubCht");
    测试了一下,可以找到控件啊,你看看是不是数据什么的出错了.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:56:3812楼 得分:0
    代码根本就不对!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 09:59:5413楼 得分:1
    C# code
    protected void [color=#FF0000]ddlSubCht[/color]_SelectedIndexChanged(object sender, EventArgs e) { for (int i = 0; i < gvCategories.Rows.Count; i++) { DropDownList ddl = (DropDownList)gvCategories.Rows[i].FindControl("[color=#FF0000]ddlSubCht[/color]");//问题1:在Debug下发现不能找到控件 int ddlint = Convert.ToInt32(ddl.SelectedValue);//问题2:提示"未将对象引用设置到对象的实例" int key = (int)gvCategories.DataKeys[i].Value;//问题3:总是返回的同一个值.我想返回的是每行对应的DataKeys lbl.Text= ddlint+"_"+key+"_"+isSingle.ToString();//输出 } }

    SelectedIndexChanged事件是谁的??
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yagebu1983
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 10:03:5014楼 得分:0
    你直接写到一个方法中试试!!
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 15:09:1215楼 得分:0
    SelectedIndexChanged事件是GridView每行绑定的那个DropDownList的
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:46:0216楼 得分:0
    引用 5 楼 include_me 的回复:
    C# code
    protected void ddlSubCht_SelectedIndexChanged(object sender, EventArgs e)
    {
      DropDownList ddl = (DropDownList)sender;
      int ddlint = Convert.ToInt32(ddl.SelectedValue);
      int key = (int)gvCategories.DataKeys[(ddl.Parent as GridViewRow).RowIndex].Value;
      ..
    }


    这个靠谱了.不过还是取不到ddl所对应行的DataKeys....
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • yuchangmao
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 16:59:3717楼 得分:1
    for (int i=0;i <GvCaseApplyList.Rows.counts;i++)
    {
    DropDownList ddlSubCht = (DropDownList)GvCaseApplyList.Rows[i].cell[列].FindControl("ddlSubCht");
    if(ddlSubCht!=null)
    {
      id=this.GvCaseApplyList.DataKeys[i].ToString();
      break;
    }
    }

    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:29:5918楼 得分:0
    通过Debug已分析出在DropDownList事件发生时执行ddlSubCht_SelectedIndexChanged.
    因此通过该事件的sender是可以返回ddl的取值.
    但因没有进行GridViewRows选择,所以造成SelectedRow返回null,导致DataKeys为空.
    缺少Cells不是造成找不到控件的原因.

    希望各高手探讨.怎样可以进行SelectedRow的确定?
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • mators
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 17:51:2719楼 得分:30
    http://www.cnblogs.com/weekzero/archive/2006/05/16/401231.html
    自己慢慢研究,:)
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 19:10:4420楼 得分:0
    楼上方案无用~~继续
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-22 21:49:4021楼 得分:0
    没有办法解决吗?up~~
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • insus
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 01:06:2222楼 得分:0
    虽然是DataList例子,但是还是可以参考的:

    http://blog.csdn.net/insus/archive/2008/04/28/2336874.aspx
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • itcoo
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-08-23 03:11:0823楼 得分:0
    完美解决.
    原来是要通过委托来取得DataKeys,受益非浅.
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • xocom
    • 等级:
    • 可用分等级:
    • 总技术分:
    • 总技术分排名:
    发表于:2008-09-05 09:17:1324楼 得分:0
    引用 23 楼 itcoo 的回复:
    完美解决.
    原来是要通过委托来取得DataKeys,受益非浅.
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved