DreamMaster:关于自定义WEB控件中数据绑定的问题

triout 2002-06-19 04:20:52
在使用自定义控件的时候,发现如果属性是通过数据库来绑定的,那么就失去作用,后来,我RENDER方法中设置DROPDOWNLIST的SELECTEDINDEX,实现我所期望的目标,现在有下面的问题面临:

我希望对数据库数据的检索时设定相关的条件(即通过设置CERTRIC来设置条件),显然在ONINIT中是不成功的,想到上面使用RENDER成功完成了SELECTEDINDEX的设置,也想尝试,但失败了。

你在我的上一个问题中指出:设置DEFAULTVALUE(-1)可以实现,但我发现没有成功,请问,现在的问题该如何实现?

谢谢!!

参见下面的源代码。
...全文
49 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
RoseKate 2010-06-09
  • 打赏
  • 举报
回复
你用的数据库时用存储过程没有的呢 是不是存储过程的问题的 还有就是在定义之时与数据库的对应错误 我所遇到是的错误 希望能给你一点帮助
daview 2002-06-20
  • 打赏
  • 举报
回复
问题已经解决:

所有的处理应该在PRERENDER事件中处理,这样就可以保证CERTRIC(通过数据库绑定的数据存在,而其他事件都不必要编程,代码如下:
protected override void OnPreRender(EventArgs e)
{
this.strTemp=this.SelectedValue;
this.geoOnInit();
this.SelectedValue=this.strTemp;
int intItemCount=this.Items.Count;
int i=0;
for(;i<intItemCount;i++)
if(this.Items[i].Value==this.SelectedValue)
break;
this.SelectedIndex=i;
}
新的不解是:
1——
在进入或退出PRERENDER事件,都没办法检测CERTRIC的值,总是返回假,但在geoOnInit中,又能成功的应用;

2——
在进入PRERENDER时,能检测到SELECTEDVALUE的值,但调用geoOnInit后,该值又为空,因此使用了一个中间变量strTemp。

谢谢DreamMaster的关注!
dreammaster 2002-06-20
  • 打赏
  • 举报
回复
我的msn yanghaifeng@msn.com,我最近忙,有事可以以msn来找我。
dreammaster 2002-06-20
  • 打赏
  • 举报
回复
我的msn是yanghaifeng@msn.com,有事可以在msn上找我。最近一断时间较忙,少有空上来csdn了。
triout 2002-06-19
  • 打赏
  • 举报
回复
我是想在DROPDOWNLIST在显示的时候,检测CERTRIC的值,如果设置条件,则在ONINIT事件中的数据绑定中,设置数据的检索条件为CERTRIC。
dreammaster 2002-06-19
  • 打赏
  • 举报
回复
你是想利用一个可设置的属性如CERTRIC来改变在列表框中显示的内容吗?
triout 2002-06-19
  • 打赏
  • 举报
回复
上次问题连接:http://www.csdn.net/Expert/TopicView1.asp?id=801811
triout 2002-06-19
  • 打赏
  • 举报
回复
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;

namespace GEOControls
{
/// <summary>
/// GeoDropDownList 的摘要说明。
/// </summary>
[DefaultProperty("SelectedValue"),
ToolboxData("<{0}:GeoDropDownList runat=server></{0}:GeoDropDownList>")]
public class GeoDropDownList : System.Web.UI.WebControls.DropDownList
{
private string strSelectedValue="";
private bool blIsAll=false;
private string strDataBase="";
private string strDataTable="";
private string strValueField="";
private string strTextField="";
private string strCertric="";
private string strOrderField="";
private bool blOrderDesc=false;
private string strSelCmd="";

protected override void OnSelectedIndexChanged(EventArgs e)
{
base.OnSelectedIndexChanged(e);
}
protected override void OnInit(EventArgs e)
{
this.geoOnInit();
}
protected void geoOnInit()//EventArgs e)
{
if(this.DataBase!=""&&this.DataTable!=""&&this.ValueField!=""&&this.TextField!="")
{
SqlConnection sqlConn=new SqlConnection(ConfigurationSettings.AppSettings[this.DataBase]);
SqlDataAdapter sqlDA=new SqlDataAdapter("select * from "+this.DataTable,sqlConn);
if((!this.IsAll))
{
this.strSelCmd="IsAll ";
if((this.Certric!=""))
{
this.strSelCmd+="Certric ";
sqlDA.SelectCommand.CommandText+=" where ("+this.Certric+")";
}
}
if(this.OrderField!="")
{
sqlDA.SelectCommand.CommandText+=" Order By "+this.OrderField+" ";
if(this.OrderDesc)
sqlDA.SelectCommand.CommandText+=" Desc ";
}
this.strSelCmd+=sqlDA.SelectCommand.CommandText;
DataSet ds=new DataSet();
sqlConn.Open();
sqlDA.Fill(ds);
this.DataSource=ds.Tables[0];
this.DataTextField=this.TextField;
this.DataValueField=this.ValueField;
this.DataBind();
sqlDA.Dispose();
ds.Dispose();
sqlConn.Close();
}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string SelectedValue
{
get {return this.strSelectedValue;}
set {this.strSelectedValue = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue(false)]
public bool IsAll
{
get {return this.blIsAll;}
set {this.blIsAll = value;}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string DataBase
{
get {return this.strDataBase;}
set {this.strDataBase = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string DataTable
{
get {return this.strDataTable;}
set {this.strDataTable = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string ValueField
{
get {return this.strValueField;}
set {this.strValueField = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string TextField
{
get {return this.strTextField;}
set {this.strTextField = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue("-1")]
public string Certric
{
get {return this.strCertric;}
set {this.strCertric = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue("")]
public string OrderField
{
get {return this.strOrderField;}
set {this.strOrderField = value.Trim();}
}
[Bindable(true), Category("Data"), DefaultValue(false)]
public bool OrderDesc
{
get {return this.blOrderDesc;}
set {this.blOrderDesc = value;}
}

/// <summary>
/// 将此控件呈现给指定的输出参数。
/// </summary>
/// <param name="output"> 要写出到的 HTML 编写器 </param>
protected override void Render(HtmlTextWriter output)
{
if(this.SelectedValue!="")
{
int intItemCount=this.Items.Count;
int i;
for(i=0;i<intItemCount;i++)
if(this.Items[i].Value==this.SelectedValue)
break;
this.SelectedIndex=i<intItemCount?i:0;

}
//output.Write(this.strSelCmd);
base.Render(output);
}
}
}

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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