前台:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Calendar.aspx.cs" Inherits="WebApplication1.TextWaterMark.Calendar" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="../Js/JScript1.js"></script>
<script type="text/javascript">
function closeCalendar()
{
$find("CalendarExtender2").hide();
}
</script>
</head>
<body onprerender="test()">
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table style="width: 600px">
<tr>
<td style="width: 200px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Image ID="Image1" onclick="closeCalendar()" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><asp:Image ID="Image2" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></td>
</tr>
<tr>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender1" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image1"
TargetControlID="TextBox1">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender2" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image2"
TargetControlID="TextBox2">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
</td>
</tr>
<tr>
<td colspan="3">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("date") %>'></asp:TextBox>
<asp:Image ID="Image3" runat="server" ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" />
<cc1:CalendarExtender ID="CalendarExtender3" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image3"
TargetControlID="TextBox3">
</cc1:CalendarExtender>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>後台:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;namespace WebApplication1.TextWaterMark
{
public partial class Calendar : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("date", typeof(string));
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr = dt.NewRow();
dt.Rows.Add(dr); GridView1.DataSource = dt;
GridView1.DataBind();
}
} protected void Button1_Click(object sender, EventArgs e)
{ }
}
}
因為ajax calendar當我打開一個時,如果不進行任何操作,再去打開另一個,則會同時出現2個日曆框,如果2個隔得近,則會互相擋住
因此我想當我打開一個時候,其他的都關閉,如果在頁面中沒問題
我可以用
$find("CalendarExtender2").hide();//在CalendarExtender1打開時關閉CalendarExtender2
但是在gridview中(我需要增加行編輯),ID是開始不知道的,我該如何做
也就是我點任意一個calendar,其他的都關閉,只它本身打開
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Calendar.aspx.cs" Inherits="WebApplication1.TextWaterMark.Calendar" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="../Js/JScript1.js"></script>
<script type="text/javascript">
function closeCalendar()
{
$find("CalendarExtender2").hide();
}
</script>
</head>
<body onprerender="test()">
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table style="width: 600px">
<tr>
<td style="width: 200px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Image ID="Image1" onclick="closeCalendar()" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><asp:Image ID="Image2" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></td>
</tr>
<tr>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender1" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image1"
TargetControlID="TextBox1">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender2" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image2"
TargetControlID="TextBox2">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
</td>
</tr>
<tr>
<td colspan="3">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("date") %>'></asp:TextBox>
<asp:Image ID="Image3" runat="server" ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" />
<cc1:CalendarExtender ID="CalendarExtender3" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image3"
TargetControlID="TextBox3">
</cc1:CalendarExtender>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>後台:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;namespace WebApplication1.TextWaterMark
{
public partial class Calendar : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("date", typeof(string));
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr = dt.NewRow();
dt.Rows.Add(dr); GridView1.DataSource = dt;
GridView1.DataBind();
}
} protected void Button1_Click(object sender, EventArgs e)
{ }
}
}
因為ajax calendar當我打開一個時,如果不進行任何操作,再去打開另一個,則會同時出現2個日曆框,如果2個隔得近,則會互相擋住
因此我想當我打開一個時候,其他的都關閉,如果在頁面中沒問題
我可以用
$find("CalendarExtender2").hide();//在CalendarExtender1打開時關閉CalendarExtender2
但是在gridview中(我需要增加行編輯),ID是開始不知道的,我該如何做
也就是我點任意一個calendar,其他的都關閉,只它本身打開
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Calendar.aspx.cs" Inherits="WebApplication1.TextWaterMark.Calendar" %><%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Namespace="System.Web.UI" TagPrefix="asp" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript" src="../Js/JScript1.js"></script>
<script type="text/javascript">
function closeCalendar()
{
$find("CalendarExtender2").hide();
}
</script>
</head>
<body onprerender="test()">
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</div>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<table style="width: 600px">
<tr>
<td style="width: 200px">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><asp:Image ID="Image1" onclick="closeCalendar()" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><asp:Image ID="Image2" runat="server"
ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" /></td>
<td style="width: 200px">
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /></td>
</tr>
<tr>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender1" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image1"
TargetControlID="TextBox1">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
<cc1:CalendarExtender ID="CalendarExtender2" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image2"
TargetControlID="TextBox2">
</cc1:CalendarExtender>
</td>
<td style="width: 200px">
</td>
</tr>
<tr>
<td colspan="3">
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TextBox3" runat="server" Text='<%# Eval("date") %>'></asp:TextBox>
<asp:Image ID="Image3" runat="server" ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" />
<cc1:CalendarExtender ID="CalendarExtender3" runat="server" Format="yyyy-MM-dd" PopupButtonID="Image3"
TargetControlID="TextBox3">
</cc1:CalendarExtender>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</td>
</tr>
</table>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>後台:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;namespace WebApplication1.TextWaterMark
{
public partial class Calendar : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
DataTable dt = new DataTable();
DataColumn dc = new DataColumn("date", typeof(string));
dt.Columns.Add(dc);
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
dr = dt.NewRow();
dt.Rows.Add(dr); GridView1.DataSource = dt;
GridView1.DataBind();
}
} protected void Button1_Click(object sender, EventArgs e)
{ }
}
}
因為ajax calendar當我打開一個時,如果不進行任何操作,再去打開另一個,則會同時出現2個日曆框,如果2個隔得近,則會互相擋住
因此我想當我打開一個時候,其他的都關閉,如果在頁面中沒問題
我可以用
$find("CalendarExtender2").hide();//在CalendarExtender1打開時關閉CalendarExtender2
但是在gridview中(我需要增加行編輯),ID是開始不知道的,我該如何做
也就是我點任意一個calendar,其他的都關閉,只它本身打開
这里有个问题就是,在GridView里的控件,在生成页面的时候Id会改变,也就是说在你运行程序,在页面上“查看源代码”,
你会发现相应的textbox的id已经不是textbox1,textbox2,而CalendarExtender1的id也不是CalendarExtender1了,
不过有一点,textbox1生成的页面id里面肯定会包含“textbox1”这个字符串,至于CalendarExtender1,因为它是一个自定义控件,生成的页面控件是什么东西,用“查看源文件”应该可以看到了,估计是div,table之类的东东了,可以试一下:<script type="text/javascript">
function closeCalendar()
{
$find("CalendarExtender2").hide();
}
</script>改成<script type="text/javascript">
function closeCalendar(objID)
{
var ctrls = document.all;
for(var i = 0;i < ctrls.length;i++)
{
if(ctrls[i].id.indexOf("CalendarExtender") >= 0 && ctrls[i].id.indexOf(objID) < 0)
{
$find(ctrls[i].id).hide();
}
}
}
</script>将所有Image的onclick改下,例如<asp:Image ID="Image1" onclick='closeCalendar(CalendarExtender1)' runat="server" ImageAlign="Top" ImageUrl="~/Image/datePicker.gif" />Image2的onclick='closeCalendar(CalendarExtender2)'类推之
如果是像gridview里的Textbox那很好解決了
我查看html代碼根本找不到那個控件ID,很奇怪,如果是textbox,甚至驗証控件,都很好找到(在Gridview)找gridview中textbox(開始放進去是textbox1)
var rowIndex = source.parentNode.parentNode.rowIndex;
var obj = document.getElementById("GridView1").rows[rowIndex].cells[4].childNodes[0];//這樣很好找
但是那calendar是沒有東西在上面的
我把Html代碼給你看下就知道
HtmlCode:
<div>
<table cellspacing="0" rules="all" border="1" id="GridView1" style="border-collapse:collapse;">
<tr>
<th scope="col"> </th>
</tr><tr>
<td>
<input name="GridView1$ctl02$TextBox3" type="text" id="GridView1_ctl02_TextBox3" />
<img id="GridView1_ctl02_Image3" src="../Image/datePicker.gif" align="top" style="border-width:0px;" />
</td>
</tr><tr>
<td>
<input name="GridView1$ctl03$TextBox3" type="text" id="GridView1_ctl03_TextBox3" />
<img id="GridView1_ctl03_Image3" src="../Image/datePicker.gif" align="top" style="border-width:0px;" />
</td>
</tr>
</table>
</div>它的html代碼是在:
<script type="text/javascript">
<!--
Sys.Application.initialize();
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.CalendarBehavior, {"button":$get("Image1"),"format":"yyyy-MM-dd","id":"CalendarExtender1"}, null, null, $get("TextBox1"));
});
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.CalendarBehavior, {"button":$get("Image2"),"format":"yyyy-MM-dd","id":"CalendarExtender2"}, null, null, $get("TextBox2"));
});
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.CalendarBehavior, {"button":$get("GridView1_ctl02_Image3"),"format":"yyyy-MM-dd","id":"GridView1_ctl02_CalendarExtender3"}, null, null, $get("GridView1_ctl02_TextBox3"));
});
Sys.Application.add_init(function() {
$create(AjaxControlToolkit.CalendarBehavior, {"button":$get("GridView1_ctl03_Image3"),"format":"yyyy-MM-dd","id":"GridView1_ctl03_CalendarExtender3"}, null, null, $get("GridView1_ctl03_TextBox3"));
});
// -->
</script>很郁悶,我明天就回家了,卻留下個尾巴
我想了個很笨的辦法:
就是在GridView1_RowDataBound事件中取得所有calendar ID都存放在一個隱藏textbox中(GridView1_ctl02_CalendarExtender3,GridView1_ctl03_CalendarExtender3)
然後我在點image時候,去裡面取ID(逗號分隔)
效果是實現了,感覺很牽強