Can anyone please help me to solve is issue.
Am using repeater control to load the data from database. Its working properly, though am going this for visually impaired persons I am using SpeechSynthesizer to serve an audio output to the users.
Without using repeater the audio is working perfectly , but I need to load 100’s of data to the page, so I bound to repeater. Using repeater the SpeechSynthesizer is not functioning. Please check my code and do the needful.
SOURCE CODE:
<%@ Page language="C#" autoeventwireup="true" codefile="Repeater.aspx.cs" inherits="Repeater"
async="true" %>
<%@ Register assembly="AjaxControls" namespace="AjaxControls" tagprefix="cc1" %>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager id="ScriptManager1" runat="server"></asp:ScriptManager>
<asp:UpdatePanel id="UpdatePanel1" runat="server">
<ContentTemplate>
<div>
<asp:Repeater id="rptCustomers" runat="server">
<HeaderTemplate>
<table border="1">
<tr>
<th scope="col" style="width: 80px">S.No
</th>
<th scope="col" style="width: 80px">Option A
</th>
<th scope="col" style="width: 120px">Option B
</th>
</tr>
</HeaderTemplate>
<ItemTemplate>
<tr>
<td>
<asp:Label id="lbl_Sno" runat="server" text='<%# Bind("OrtAna_SNo") %>'></asp:Label>
</td>
<td>
<asp:RadioButton id="rdOrtAna_ADesc" runat="server" text='<%# Bind("OrtAna_ADesc") %>'
groupname="Option" />
</td>
<td>
<asp:RadioButton id="rdOrtAna_BDesc" runat="server" text='<%# Bind("OrtAna_BDesc") %>'
groupname="Option" />
</td>
</tr>
<tr>
<td colspan="3">
<asp:Button id="btn_Spk" runat="server" text="Read" commandname="Speak" />
</td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
CODE BEHIND:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Speech;
using System.Speech.Synthesis;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.Threading;
public partial class Repeater : System.Web.UI.Page
{
SpeechSynthesizer sp1 = new SpeechSynthesizer();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
bindgrid();
}
}
public SqlConnection Con()
{
string Connectionstring = string.Empty;
Connectionstring = ConfigurationManager.ConnectionStrings["DBCon"].ToString();
SqlConnection conn = new SqlConnection(Connectionstring);
return conn;
}
public void bindgrid()
{
SqlConnection conn = Con();
SqlCommand cmd = new SqlCommand("select * from dbo.OrtAna order by OrtAna_SNo", conn);
cmd.CommandType = CommandType.Text;
using (SqlDataAdapter sda = new SqlDataAdapter(cmd))
{
DataTable dt = new DataTable();
sda.Fill(dt);
rptCustomers.DataSource = dt;
rptCustomers.DataBind();
}
}
override protected void OnInit(EventArgs e)
{
base.OnInit(e);
rptCustomers.ItemCommand += new RepeaterCommandEventHandler(rptCustomers_ItemCommand);
}
protected void rptCustomers_ItemCommand(object source, RepeaterCommandEventArgs e)
{
RadioButtonList rbt1 = (RadioButtonList)(rptCustomers.FindControl("rdOrtAna_ADesc"));
RadioButtonList rbt2 = (RadioButtonList)(rptCustomers.FindControl("rdOrtAna_BDesc"));
sp1.Volume = 100;
sp1.Rate = -3;
if (e.CommandName == "Speak")
{
if (e.Item.ItemIndex == 0)
{
sp1.SpeakAsync(rbt1.Text); // Here the code gets keep on loading.
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
if (e.Item.ItemIndex == 1)
{
sp1.SpeakAsync(rbt1.Text);
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
if (e.Item.ItemIndex == 2)
{
sp1.SpeakAsync(rbt1.Text);
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
if (e.Item.ItemIndex == 3)
{
sp1.SpeakAsync(rbt1.Text);
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
if (e.Item.ItemIndex == 4)
{
sp1.SpeakAsync(rbt1.Text);
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
if (e.Item.ItemIndex == 5)
{
sp1.SpeakAsync(rbt1.Text);
sp1.Pause();
Thread.Sleep(1500);
sp1.Resume();
sp1.SpeakAsync(rbt2.Text);
sp1.Pause();
Thread.Sleep(1500);
}
//need more itemindex to be looped; because having 100 of records to be accessed.
}
}
}
Please do the needful as soon as possible.
Warm Regards,
Narendran Namachivayam,