I want to update the text property of my textbox control in Asp.Net from within loop.I have tried using Ajax updatepanel with the timer control but unable to update the text property.I have been searching this since last week but unable to find any answer any help would be higly appreciated
Following is the detail:
This is my button click event in this code you can see I am updating the
TxtContent.Text
within a loop the text is being returned by a user defined function called
ReturnBodyText()
afterwards I am assigning the text to the viewstate so that at the timer tick event I can recall the text and update the textbox text property and then at the timer tick event assigning the viewstate values to the textbox.
protected void Button4_Click(object sender, EventArgs e)
{
ArrayList FilePath = (ArrayList)ViewState["ArrayList"];
int i = 0;
int b = 1;
foreach(string[] sr in FilePath)
{
string Month = sr[i];
string datewithzero;
datewithzero = String.Format("{0:00}", b);
string[] FilesArray = (string[])listfiles(Month, datewithzero).ToArray(typeof(string));
foreach (string FileNameWithExtension in FilesArray)
{
ListBox4.Items.Add(FileNameWithExtension);
TxtContent.Text = ReturnBodyText(Month, datewithzero, FileNameWithExtension);
ViewState["Content"] = TxtContent.Text;
Timer1.Enabled = true;
Timer1_Tick(ViewState["Content"], e);
}
i = i + 1;
b = b + 1;
}
}
protected void Timer1_Tick(object sender, EventArgs e)
{
TxtContent.Text =(string) ViewState["Content"];
TxtContent.DataBind();
}
I Hope the above description will help you guys in understanding my problem
The complete aspx file and the code behind is as follows:
Aspx Code:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="asp" %>
<asp:ListBox ID="ListBox1" runat="server" Height="509px" Width="59px"> </asp:ListBox> <asp:Button ID="Button2" runat="server" Height="26px" onclick="Button2_Click" Text="To be pressed first" Width="130px" /> <asp:Button ID="Button3" runat="server" onclick="Button3_Click" Text="To be pressed 2nd" Width="131px" Height="26px" /> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:Timer ID="Timer1" runat="server" Interval="1000" ontick="Timer1_Tick" Enabled="False"> </asp:Timer> <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional"> <ContentTemplate> <asp:TextBox ID="TxtContent" runat="server" Height="508px" AutoPostBack="True" TextMode="MultiLine"></asp:TextBox> <asp:Button ID="Button5" runat="server" Height="26px" onclick="Button4_Click" Text="To be pressed Third" Width="122px" /> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" /> </Triggers> </asp:UpdatePanel> </div> </form>
- Codebehind:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using System.Net; using System.IO; using System.Collections;
public partial class _Default : ftp {
protected void Button2_Click(object sender, EventArgs e) { string[] array = (string[])listfiles().ToArray(typeof(string)); ViewState["FolderName"] = array; foreach (string FileName in array) { ListBox1.Items.Add(FileNam开发者_如何学运维e); } } protected void Button3_Click(object sender, EventArgs e) { string[] arraylistbox2 = (string[])ViewState["FolderName"]; string[] arrays = new string[12]; ArrayList ListPath = new ArrayList(); int dateFolder; foreach (string FileName in arraylistbox2) { dateFolder = Convert.ToInt16(FileName); dateFolder = dateFolder - 1; ListPath.Add((string[])(listfiles(FileName).ToArray(typeof(string)))); } ViewState["ArrayList"] = ListPath; } protected void Button4_Click(object sender, EventArgs e) { ArrayList FilePath = (ArrayList)ViewState["ArrayList"]; int i = 0; int b = 1; foreach(string[] sr in FilePath) { string Month = sr[i]; string datewithzero; datewithzero = String.Format("{0:00}", b); string[] FilesArray = (string[])listfiles(Month, datewithzero).ToArray(typeof(string)); foreach (string FileNameWithExtension in FilesArray) { TxtContent.Text = ReturnBodyText(Month, datewithzero, FileNameWithExtension); ViewState["Content"] = TxtContent.Text; Timer1.Enabled = true; Timer1_Tick(ViewState["Content"], e); } i = i + 1; b = b + 1; } } protected void Timer1_Tick(object sender, EventArgs e) { TxtContent.Text =(string) ViewState["Content"]; TxtContent.DataBind(); }
Sadly, your code did not help me much. However, I wrote this which I believe does what you want -partially-. It seems to me nothing more can be done though. Here is the code:
.aspx file:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default" %>
<!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></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Timer runat="server" ID="Timer1" Interval="1000" Enabled="true"
ontick="Timer1_Tick" />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
<ContentTemplate>
<asp:Label ID="Label1" runat="server" Text=""></asp:Label>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>
aspx.cs file:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Threading;
namespace WebApplication1
{
public partial class Default : System.Web.UI.Page
{
protected static string keeper;
protected static bool inUse = false;
protected void Page_Load(object sender, EventArgs e) {}
protected void Button1_Click(object sender, EventArgs e)
{
Thread worker = new Thread(new ThreadStart(workerFunction));
worker.Start();
return;
}
protected void workerFunction()
{
inUse = true;
for (int i = 0; i < 3; i++)
{
TextBox1.Text += "foo";
keeper = TextBox1.Text;
Thread.Sleep(1000);
}
inUse = false;
keeper = "";
}
protected void Timer1_Tick(object sender, EventArgs e)
{
if (inUse)
{
TextBox1.Text = Convert.ToString(keeper);
}
}
}
}
精彩评论