请教在ascx中引用DropDownList但是返回值总为0的烦人的问题(在线等待)

supnet 2003-02-23 09:53:01
一直困扰的问题:
在ascx中生成一个DropDownList,然后在aspx模板列中引用该控件,想要实现的是:
当点击某行的编辑按钮时让该DropDownList显示的值就等于该行中的某一字段值。

但现在问题是:catid返回的值总是为零???所以该DropDownList每次显示的还是第一项的值。
请各位大侠帮忙指点!!!

源代码如下:
1、cat.ascx.cs:

public abstract class cat : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.DropDownList DropDownList1;
public string ConnString;
protected int _catid=0;

public int catid
{
get
{
return Convert.ToInt32(DropDownList1.SelectedItem.Value);
}
set
{
_catid=value;
Trace.Write("set catid", _catid.ToString());

try
{
DropDownList1.Items.FindByValue(_catid.ToString()).Selected=true;
}
catch {}

}
}
void LoadData()
{
SqlDataAdapter mycommand = new SqlDataAdapter("Select * From tb_x",ConnString);
DataSet ds = new DataSet();
mycommand.Fill(ds,"tb_x");
DataView dv = new DataView(ds.Tables[0]);
DropDownList1.DataSource = dv;
DropDownList1.DataValueField = "xid";
DropDownList1.DataTextField = "xmc";
DropDownList1.DataBind();
}

private void Page_Load(object sender, System.EventArgs e)
{
IniFile ini = new IniFile("C:\\set.ini");
ConnString = ini.IniReadValue("Connection","connstring");

if (ViewState["DataLoaded"] == null)
{
LoadData();
ViewState["DataLoaded"] = true;
}

}

2、test.aspx:

<%@ Register TagPrefix="uc1" TagName="cat" Src="cat.ascx" %>
<asp:DataGrid id="DataGrid1" runat="server" OnUpdateView="UpdateView" AutoGenerateColumns="false">
<Columns>
<ASP:BOUNDCOLUMN runat="server" headertext="系名称" datafield="xmc"></ASP:BOUNDCOLUMN>
<ASP:TEMPLATECOLUMN HeaderText="系名称">
<EditItemTemplate>
<uc1:cat id=Cat1 runat="server" catid='<%# int.Parse(DataBinder.Eval(Container.DataItem, "xid").ToString())%>'>
</uc1:cat>
</EditItemTemplate>
</ASP:TEMPLATECOLUMN>
</COLUMNS>
</DataGrid>

谢谢大家!!!
...全文
80 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
supnet 2003-02-26
  • 打赏
  • 举报
回复
尽管问题还没解决,但我还是谢谢各位的支持!
现在结贴了!
chyich 2003-02-25
  • 打赏
  • 举报
回复
不好意思,无能为力了,你自己调试吧.
oar 2003-02-24
  • 打赏
  • 举报
回复
在pageload中

if (!IsPostback)
{
//绑定dropdownlist;
}
supnet 2003-02-24
  • 打赏
  • 举报
回复
to dreammaster:
用过!你写的代码只是现实一个DropDownList的引用,并非是把所需要的值显示在DropDownList的第一项!!
还是谢谢dreammaster!!
dreammaster 2003-02-24
  • 打赏
  • 举报
回复
to supnet
用过我在上面写的代码吗?
supnet 2003-02-24
  • 打赏
  • 举报
回复
请问各位大侠还有没有办法处理这样的问题??
很郁闷啊!!!!
拜托了!!!
dreammaster 2003-02-23
  • 打赏
  • 举报
回复
我写了一个简单的例子你看看.
MyList.ascx

代码:
<%@ Control Language="c#" AutoEventWireup="false" Codebehind="MyList.ascx.cs" Inherits="Learn.MyList" TargetSchema="http://schemas.microsoft.com/intellisense/ie5"%>
<FONT face="宋体"></FONT>
<asp:DropDownList ID="ddlMyList" AutoPostBack="True" Font-Size="8pt" Font-Name="verdana" Runat="server">
<asp:ListItem Value="0">First</asp:ListItem>
<asp:ListItem Value="1">Second</asp:ListItem>
<asp:ListItem Value="2">Third</asp:ListItem>
</asp:DropDownList>

MyList.ascx.cs
代码如下:
namespace Learn
{
using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// MyList 的摘要说明。
/// </summary>
public abstract class MyList : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.DropDownList ddlMyList;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

public int CatID
{
get
{
if (ViewState["catid"] == null)
{
ViewState["catid"] = ddlMyList.SelectedIndex;
}
return (int)ViewState["catid"];
}
set
{
ViewState["catid"] = value;
ddlMyList.SelectedIndex = value;
}
}

/// 设计器支持所需的方法 - 不要使用
/// 代码编辑器修改此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.ddlMyList.SelectedIndexChanged += new System.EventHandler(this.ddlMyList_SelectedIndexChanged);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void ddlMyList_SelectedIndexChanged(object sender, System.EventArgs e)
{
ViewState["catid"] = ddlMyList.SelectedIndex;
}
}
}

引用界面如下:
test.aspx
<%@ Page language="c#" Codebehind="Test.aspx.cs" AutoEventWireup="false" Inherits="Learn.Test" %>
<%@ Register TagPrefix="uc1" TagName="MyList" Src="MyList.ascx" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>Test</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Test" method="post" runat="server">
<uc1:MyList id="MyList1" CatID="2" runat="server"></uc1:MyList>
</form>
</body>
</HTML>

改变CatID可见效果.
supnet 2003-02-23
  • 打赏
  • 举报
回复
to dreammaster:
catid返回的值仍为0!还是不见效!
谢谢dreammaster!!
supnet 2003-02-23
  • 打赏
  • 举报
回复
to chyich:
当加完你说的后,出现DropDownList什么也没有绑定!
还是谢谢chyich!
dreammaster 2003-02-23
  • 打赏
  • 举报
回复
定义catid时,可以考虑用ViewState保存

public int CatID
{
get{ return (int)ViewState["catid"]}
set{ ViewState["catid"] = value}
}
chyich 2003-02-23
  • 打赏
  • 举报
回复
我仔细的看了一下你的代码,可以问题出在你的catid的属性上,你在开始的时候声明了protected int _catid=0;我想这个语句每次类初始化时都执行了,所以dropdownlist值一直都是0,
改成:
protected int _catid;试试
前面说的加if (!page.ispostback)也要加上去.否则可以也是0
supnet 2003-02-23
  • 打赏
  • 举报
回复
to chyich:
还是不行!!!
supnet 2003-02-23
  • 打赏
  • 举报
回复
to outiejun:
因为通过catid传过来的值总是为0,所以无法给DropDownList赋值!!
还是谢谢outiejun!!
chyich 2003-02-23
  • 打赏
  • 举报
回复
加上:
private void Page_Load(object sender, System.EventArgs e)
{
IniFile ini = new IniFile("C:\\set.ini");
ConnString = ini.IniReadValue("Connection","connstring");
if(!Page.IsPostback)
{
if (ViewState["DataLoaded"] == null)

{
LoadData();
ViewState["DataLoaded"] = true;
}
}
}
outiejun 2003-02-23
  • 打赏
  • 举报
回复
在pageload中

if (!IsPostback)
{
将您的dropdownlist赋值;
}

试试
supnet 2003-02-23
  • 打赏
  • 举报
回复
to Corny:
如何设置ViewState呢?能具体点吗?谢谢!
Corny 2003-02-23
  • 打赏
  • 举报
回复
我想是由于ascx由于每次刷新(包括postback)都会随着aspx重新加载所致,
也就是说DropDownlist每次刷新都会重新加载一遍Data,因此你需要保留Set(Value)的值,或者你可以上ascx支持ViewState并在aspx中设置ViewState试试看
supnet 2003-02-23
  • 打赏
  • 举报
回复
to chyich:
编译报错:没有引用实例,可能返回的值仍是0!报错的地方:
return Convert.ToInt32(DropDownList1.SelectedItem.Value);

to niwalker:
能执行!但仍旧显示的是第一项的值!!

仍旧谢谢大家!!!
supnet 2003-02-23
  • 打赏
  • 举报
回复
谢谢各位的关心!!
我正试试!!!
niwalker 2003-02-23
  • 打赏
  • 举报
回复
用我的代码吧 :)

public int CatId
{
get
{
if (ViewState["catid"]==null)
ViewState["catid"]=0;
return Int32.Parsh(ViewState["catid"]);
}
set
{
ViewState["catid"]=value;
}
}

让你的所有用到_catId的地方,改为CatId 。

OK?
加载更多回复(1)
实现了图书管理系统,功能主要分为三部分:书目检索、读者管理、图书管理;书目检索包括普通检索和高级检索;读者管理包括读者登录、读者信息、读者借阅历史、读者当前借阅、读者借阅过期催还、管理员登录等功能;图书管理包括图书借阅、图书归还、添加图书、图书维护、添加用户、用户维护、密码修改。 \MyLibrary\App_Code\BusinessLogicLayer 图书管理业务逻辑层,包括以下文件: \Book.cs 图书信息类 \Borrow.cs 借阅类 \User.cs 用户类 \MyLibrary\App_Code\DataAccessHelper 图书管理数据访问接口层,包括文件: \SQLString.cs 构造SQL语句的通用类 \GetSafeData.cs 安全获取数据类 \MyLibrary\App_Code\DataAccessLayer 图书管理数据访问层,包括文件: \DataBase.cs 数据访问类 \MyLibrary\Controls 图书管理用户控件,包括文件: \AdminLeft.ascx 管理员左侧菜单控件 \ReaderLogin.ascx 用户登录后菜单控件 \ReaderTop.ascx 用户不登录菜单控件 \MyLibrary\DB \MyLibrary.sql 图书管理数据库创建脚本 \MyLibrary\DB \MyLibrary.bak 图书管理数据库备份 \MyLibrary\Images\ 图书管理系统图片文件夹 \MyLibrary\UsersManage 图书管理用户管理,包括文件: \UserAdd.aspx 添加用户页面 \UserLists.aspx 用户维护页面 \UserDetails.aspx 用户详细页面 \MyLibrary\BookManage 图书管理图书管理,包括文件: \BookAdd.aspx 添加图书页面 \BookLists.aspx 图书维护页面 \BookDetails.aspx 图书详细页面 \BookSearch.aspx 图书搜索页面 \BookSearchResult.aspx 搜索结果页面 \ReaderBookAdvancedSearch.aspx 用户高级搜索页面 \AdminBookAdvancedSearch.aspx 管理员高级搜索页面 \MyLibrary\Reader 图书管理读者信息管理,包括文件: \ReaderLogin.aspx 读者登录页面 \ReaderLoginMain.aspx 读者登录后主页面 \ReaderNotLogin.aspx 读者未登录页面 \ReaderBorrowHistory.aspx 借阅历史页面 \ReaderCurrentBorrow.aspx 当前借阅页面 \ReaderExpireCuiHuan.aspx 过期催还页面 \ReaderInformation.aspx 读者信息页面 \MyLibrary\Borrow 图书管理借阅管理,包括文件: \BorrowBook.aspx 借阅图书页面 \ReturnBook.aspx 归还图书页面

62,040

社区成员

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

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

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

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