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 scope="col" style="width: 120px">Option B
</tr>
</HeaderTemplate>
<ItemTemplate>
<td>
<asp:Label id="lbl_Sno" runat="server" text='<%# Bind("OrtAna_SNo") %>'></asp:Label>
</td>
<asp:RadioButton id="rdOrtAna_ADesc" runat="server" text='<%# Bind("OrtAna_ADesc") %>'
groupname="Option" />
<asp:RadioButton id="rdOrtAna_BDesc" runat="server" text='<%# Bind("OrtAna_BDesc") %>'
<td colspan="3">
<asp:Button id="btn_Spk" runat="server" text="Read" commandname="Speak" />
</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);
if (e.Item.ItemIndex == 1)
sp1.SpeakAsync(rbt1.Text);
if (e.Item.ItemIndex == 2)
if (e.Item.ItemIndex == 3)
if (e.Item.ItemIndex == 4)
if (e.Item.ItemIndex == 5)
//need more itemindex to be looped; because having 100 of records to be accessed.