.net如何用多个dropdownlist分别来绑定多个年月日

patty1991 2012-10-15 03:12:39

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Collections;

public partial class Default3 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

gettime();

}

private void gettime()
{
DateTime tnow = DateTime.Now;//现在时间
//Response.Write(tnow);
ArrayList AlYear = new ArrayList();

int i;

for (i = 1950; i <= int.Parse(tnow.Date.Year.ToString()); i++)

AlYear.Add(i);

ArrayList AlMonth = new ArrayList();

for (i = 1; i <= 12; i++)

AlMonth.Add(i);

if (!this.IsPostBack)
{

DropDownList1.DataSource = AlYear;

DropDownList1.DataBind();//绑定年

//选择当前年

DropDownList1.SelectedValue = tnow.Year.ToString();

DropDownList2.DataSource = AlMonth;

DropDownList2.DataBind();//绑定月

//选择当前月


DropDownList2.SelectedValue = tnow.Month.ToString();

int year, month;

year = Int32.Parse(DropDownList1.SelectedValue);

month = Int32.Parse(DropDownList2.SelectedValue);

BindDays(year, month);//绑定天

//选择当前日期

DropDownList3.SelectedValue = tnow.Day.ToString();

}
}

//判断闰年

private bool CheckLeap(int year)
{

if ((year % 4 == 0) || (year % 100 != 0) && (year % 400 == 0))

return true;

else
return false;

}

//绑定每月的天数

private void BindDays(int year, int month)
{
int i;

ArrayList AlDay = new ArrayList();

switch (month)
{

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

case 12:

for (i = 1; i <= 31; i++)

AlDay.Add(i);

break;

case 2:

if (CheckLeap(year))
{
for (i = 1; i <= 29; i++)

AlDay.Add(i);
}

else
{
for (i = 1; i <= 28; i++)

AlDay.Add(i);
}

break;

case 4:

case 6:

case 9:

case 11:

for (i = 1; i <= 30; i++)

AlDay.Add(i);

break;

}

DropDownList3.DataSource = AlDay;

DropDownList3.DataBind();

}


protected void DropDownList1_SelectedIndexChanged1(object sender, EventArgs e)
{
int year, month;

year = Int32.Parse(DropDownList1.SelectedValue);

month = Int32.Parse(DropDownList2.SelectedValue);

BindDays(year, month);
}
protected void DropDownList2_SelectedIndexChanged1(object sender, EventArgs e)
{
int year, month;

year = Int32.Parse(DropDownList1.SelectedValue);

month = Int32.Parse(DropDownList2.SelectedValue);

BindDays(year, month);
}
}





<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:DropDownList ID="DropDownList1" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList2" runat="server"
onselectedindexchanged="DropDownList2_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList3" runat="server">

</asp:DropDownList>



<br />



<asp:DropDownList ID="DropDownList4" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList5" runat="server"
onselectedindexchanged="DropDownList2_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList6" runat="server">

</asp:DropDownList>


<br />


<asp:DropDownList ID="DropDownList7" runat="server"
onselectedindexchanged="DropDownList1_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList8" runat="server"
onselectedindexchanged="DropDownList2_SelectedIndexChanged1"
AutoPostBack="True">

</asp:DropDownList>
<asp:DropDownList ID="DropDownList9" runat="server">

</asp:DropDownList>

</div>
</form>
</body>
</html>



上面是我的代码,我想要的结果是我一个页面里有多个年,月,日 如何不重复下面这些代码,就是改成通用的可多次调用的方法,谢谢

if (!this.IsPostBack)
{

DropDownList1.DataSource = AlYear;

DropDownList1.DataBind();//绑定年

//选择当前年

DropDownList1.SelectedValue = tnow.Year.ToString();

DropDownList2.DataSource = AlMonth;

DropDownList2.DataBind();//绑定月

//选择当前月


DropDownList2.SelectedValue = tnow.Month.ToString();

int year, month;

year = Int32.Parse(DropDownList1.SelectedValue);

month = Int32.Parse(DropDownList2.SelectedValue);

BindDays(year, month);//绑定天

//选择当前日期

DropDownList3.SelectedValue = tnow.Day.ToString();

}


附一张效果图
...全文
313 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
patty1991 2012-10-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

Refer:


http://www.cnblogs.com/insus/archive/2012/10/16/2725307.html
[/Quote]

非常感谢insus,那么晚了还在帮我解决这问题,很感动的,而且就是我要的效果,早上一直在研究你的代码,发现我还有很多的东西要学,呵呵~而且我也成功的获取到了每个dropdownlist的数据,同时也谢谢lizeyuan8238386的指教, 忙活很长时间了终于解决了。
wangyizhi58 2012-10-16
  • 打赏
  • 举报
回复
http://www.cnblogs.com/insus/archive/2012/10/16/2725307.html
l1991422 2012-10-15
  • 打赏
  • 举报
回复
?dropdownlist事件里绑
  • 打赏
  • 举报
回复
如果你不先绑定数据, 怎么获取下拉数据呢,然后怎么添加呢


被你搞糊涂了,建议你把逻辑理清,做起来就方便多了
patty1991 2012-10-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 的回复:]

ddlYear.DataSource = Account.GetAllList().Tables[0];
ddlYear.DataTextField = "AccountName";//把数据表里字段AccountName绑定到text上
ddlYear.DataValueField = "id";//绑定.....ID到value
ddlYear.DataBind();

[/Quote]

我这里并不是冲数据库获取数据,而是添加到数据库
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

我又看了下觉得这方法应该把年月日都规范到里面可能才行,遗憾的是我还不知道怎么去写,求解
C# code

public void getDDL(DropDownList ddlYear, DropDownList ddlMonth, DropDownList ddlDays)

//。。。?



谢谢!
[/Quote]
你看我二楼给你的第一个方法就是这样的
patty1991 2012-10-15
  • 打赏
  • 举报
回复
我又看了下觉得这方法应该把年月日都规范到里面可能才行,遗憾的是我还不知道怎么去写,求解

public void getDDL(DropDownList ddlYear, DropDownList ddlMonth, DropDownList ddlDays)

//。。。?


谢谢!
  • 打赏
  • 举报
回复
ddlYear.DataSource = AlYear; //这里的AlYear就报错了‘未将对象引用设置到对象的实例。’(下面的月,肯定也会报这错的)
ddlYear.DataBind();//绑定年


这里绑定的的时候,需要绑定到指定的字段上,不然鬼晓得你下拉是要显示那些内容呢,如:


ddlYear.DataSource = Account.GetAllList().Tables[0];
ddlYear.DataTextField = "AccountName";//把数据表里字段AccountName绑定到text上
ddlYear.DataValueField = "id";//绑定.....ID到value
ddlYear.DataBind();



第二个问题,举一反三,仔细看我之前给的代码其实是同样的道理


private void BindDays(int year, int month,DropDownList ddlD)
{
//你的代码............................

ddlD.DataSource = AlDay; //、、、、这里就不是DropDownList3了而且像你说的(DaysID = "ddlDays" + i;)该怎么来修改呢。
ddlD.DataTextField = "Name";//把数据表里字段Name绑定到text上
ddlD.DataValueField = "id";//绑定.....ID到value,Value和text可以绑定为同一字段
ddlD.DataBind();
}


调用

/// <summary>
/// 加载年月日的下拉
/// </summary>
/// <param name="ddlYear">下拉年</param>
/// <param name="ddlMonth">下拉月</param>
/// <param name="ddlDays">下拉天</param>
public void getDDL(DropDownList ddlYear, DropDownList ddlMonth, DropDownList ddlDays)
{

BindDays(1,2,ddlDays);
}

patty1991 2012-10-15
  • 打赏
  • 举报
回复
谢谢你的帮助。
我用你的方法试过了,有几个问题不清楚什么原因,希望不吝解答


首先这方法是不是应该要获取tnow 初始化数据,

public void getDDL(DropDownList ddlYear, DropDownList ddlMonth, DropDownList ddlDays)
{
DateTime tnow = DateTime.Now;//现在时间
ArrayList AlYear = new ArrayList();

int i;

for (i = 1950; i <= int.Parse(tnow.Date.Year.ToString()); i++)

AlYear.Add(i);

ArrayList AlMonth = new ArrayList();

for (i = 1; i <= 12; i++)

AlMonth.Add(i);

ddlYear.DataSource = AlYear;
ddlYear.DataBind();//绑定年

//选择当前年
ddlYear.SelectedValue = tnow.Year.ToString();
ddlMonth.DataSource = AlMonth;
ddlMonth.DataBind();//绑定月

//选择当前月
ddlMonth.SelectedValue = tnow.Month.ToString();

int year, month;

int.TryParse(ddlYear.SelectedValue, out year);

int.TryParse(ddlMonth.SelectedValue, out month);

BindDays(year, month);//绑定天

//选择当前日期
ddlDays.SelectedValue = tnow.Day.ToString();

}





//不知道对不对,我这样做了,可是到

ddlYear.DataSource = AlYear; //这里的AlYear就报错了‘未将对象引用设置到对象的实例。’(下面的月,肯定也会报这错的)
ddlYear.DataBind();//绑定年




然后是

private void BindDays(int year, int month)
{
int i;

ArrayList AlDay = new ArrayList();

switch (month)
{

case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
for (i = 1; i <= 31; i++)
AlDay.Add(i);
break;
case 2:
if (CheckLeap(year))
{
for (i = 1; i <= 29; i++)
AlDay.Add(i);
}
else
{
for (i = 1; i <= 28; i++)
AlDay.Add(i);
}
break;

case 4:
case 6:
case 9:
case 11:
for (i = 1; i <= 30; i++)
AlDay.Add(i);
break;
}

DropDownList3.DataSource = AlDay; //、、、、这里就不是DropDownList3了而且像你说的(DaysID = "ddlDays" + i;)该怎么来修改呢。


DropDownList3.DataBind();

谢谢
  • 打赏
  • 举报
回复
这样中不中呢:
首先把这一部分摘出来当作方法:

/// <summary>
/// 加载年月日的下拉
/// </summary>
/// <param name="ddlYear">下拉年</param>
/// <param name="ddlMonth">下拉月</param>
/// <param name="ddlDays">下拉天</param>
public void getDDL(DropDownList ddlYear, DropDownList ddlMonth, DropDownList ddlDays)
{
ddlYear.DataSource = AlYear;
ddlYear.DataBind();//绑定年

//选择当前年
ddlYear.SelectedValue = tnow.Year.ToString();
ddlMonth.DataSource = AlMonth;
ddlMonth.DataBind();//绑定月

//选择当前月
ddlMonth.SelectedValue = tnow.Month.ToString();

int year, month;

int.TryParse(ddlYear.SelectedValue,out year);

int.TryParse(ddlMonth.SelectedValue,out month);

BindDays(year, month);//绑定天

//选择当前日期
ddlDays.SelectedValue = tnow.Day.ToString();
}

其次,页面加载的时候的时候的可以这样循环加载,只调用一次方法


if (!IsPostBack)
{
//如果你有多行的下拉,每行都是年.月.日,你可以将他们的ID明明为连续的、有规律的,如...ddlYears1,ddlYears2,ddlYears3
for (int i = 1; i < 3; i++)//i<3 根据你年月日的行数而定
{
string YearID = "";
string MonthID = "";
string DaysID = "";

YearID = "ddlYear" + i;
DropDownList ddlY = this.FindControl(YearID) as DropDownList;//findControl
MonthID = "ddlMonth" + i;
DropDownList ddlM = this.FindControl(MonthID) as DropDownList;//findControl
DaysID = "ddlDays" + i;
DropDownList ddlD = this.FindControl(DaysID) as DropDownList;//findControl

//调用方法
getDDL(ddlY, ddlM, ddlD);

}
}
patty1991 2012-10-15
  • 打赏
  • 举报
回复
大神们,求关注。。

62,046

社区成员

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

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

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

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