2
Answers

SpeechSynthesizer with Repeater control in Asp.Net C#

Narendran N

Narendran N

8y
336
1

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,
 
  
 
 
 
 
Answers (2)