Saturday, March 24, 2012

UpdatePanel and Asynch trigger gives an error

I have 2 Update Panels "ajaxIssueSummary","ajaxCCPack".
"ajaxIssueSummary" contains a gridview "dgIssueSummary" which contains a DropDownlist "ddlIssueState" as a template field.
"ajaxCCPack" contains a gridview "dgCCPack".

<ajaxExt:UpdatePanel UpdateMode="Conditional" ID="ajaxIssueSummary" runat="server">
<ContentTemplate>

<asp:GridView ID="dgIssueSummary"
runat="server"
AutoGenerateColumns="False"
DataKeyNames="pkIssueTracker"
CellPadding="4"
ForeColor="#333333"
GridLines="Vertical"
SkinID="Fun"
Width="900px"
OnRowCreated="dgIssueSummary_RowCreated" >
<Columns>
<asp:BoundField DataField="pkCustomRule" HeaderText="pkCustomRule" InsertVisible="False"
ReadOnly="True" SortExpression="pkCustomRule" Visible="False" />
<asp:BoundField DataField="fkQuestionnaireField" HeaderText="fkQuestionnaireField"
SortExpression="fkQuestionnaireField" Visible="False" />
<asp:BoundField DataField="sInternalMessage" HeaderText="Internal Message" SortExpression="sInternalMessage" >
<ItemStyle Width="300px" />
</asp:BoundField>
<asp:BoundField DataField="sExternalMessage" HeaderText="External Message" SortExpression="sExternalMessage" >
<ItemStyle Width="300px" />
</asp:BoundField>
<asp:TemplateField SortExpression="sFriendlyName" Visible="False">
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("sFriendlyName") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblFriendlyName" runat="server" Text='<%# Bind("sFriendlyName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="pkIssueTracker" InsertVisible="False" SortExpression="pkIssueTracker" Visible="False">
<ItemTemplate>
<asp:Literal ID="lblpkIssueTracker" runat="server" Text='<%# Bind("pkIssueTracker") %>'></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Status">
<ItemTemplate>
<asp:DropDownList ID="ddlIssueState" Runat="server" DataSourceID="IssuesStateDS" DataTextField="sIssueState" DataValueField="pkIssueState" SelectedValue='<%# Eval("pkIssueState") %>' AutoPostBack="true" OnSelectedIndexChanged="ddlIssueState_SelectedIndexChanged" >
</asp:DropDownList>
<asp:SqlDataSource ID="IssuesStateDS" runat="server" ConnectionString="<%$ ConnectionStrings:BritneyQuestionnaireDataConnectionString %>"
SelectCommand="SELECT [pkIssueState], [sIssueState] FROM [IssueState] WHERE pkIssueState in (1,3,6)"></asp:SqlDataSource>
</ItemTemplate>
<ItemStyle HorizontalAlign="Center" />
</asp:TemplateField>

</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</ContentTemplate>
<Triggers>
<ajaxExt:AsyncPostBackTrigger ControlID="btnOrderGo" EventName="Click" />
<ajaxExt:AsyncPostBackTrigger ControlID="ddlDocument" EventName="SelectedIndexChanged" />
<ajaxExt:AsyncPostBackTrigger ControlID="btnUpdateAnswerBank" EventName="Click" />
</Triggers>
</ajaxExt:UpdatePanel>

<ajaxExt:UpdatePanel UpdateMode="Conditional" ID="ajaxCCPack" runat="server">
<ContentTemplate>

<asp:GridView ID="dgCCPack" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True"
OnRowEditing="dgCCPack_RowEditing"
CellPadding="4"
ForeColor="#333333"
GridLines="Vertical"
OnRowCancelingEdit="dgCCPack_RowCancelingEdit"
OnRowUpdating="dgCCPack_RowUpdating"
SkinID="Fun" Width="900px">
<Columns>
<asp:TemplateField HeaderText="pkIssueTracker" InsertVisible="False" SortExpression="pkIssueTracker"
Visible="False">
<ItemTemplate>
<asp:Label ID="lblpkIssueTracker" runat="server" Text='<%# Bind("pkIssueTracker") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Internal Message" SortExpression="sInternalMessage">
<EditItemTemplate>
<asp:TextBox ID="ccEditInternalMessage" runat="server" Text='<%# Bind("sInternalMessage") %>' Width="300"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="ccInternalMessage" runat="server" Text='<%# Bind("sInternalMessage") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="300px" />
</asp:TemplateField>
<asp:TemplateField HeaderText="External Message" SortExpression="sExternalMessage">
<EditItemTemplate>
<asp:TextBox ID="ccEditExternalMessage" runat="server" Text='<%# Bind("sExternalMessage") %>' Width="300" ></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="ccExternalMessage" runat="server" Text='<%# Bind("sExternalMessage") %>'></asp:Label>
</ItemTemplate>
<ItemStyle Width="300px" />
</asp:TemplateField>
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</ContentTemplate>
</ajaxExt:UpdatePanel>

***************************************************************
The task is: when "ddlIssueState" selected index changes I need to refresh "dgCCPack".
So this is what I did :

protected void dgIssueSummary_RowCreated(object sender, GridViewRowEventArgs e)
{
try
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
DropDownList ddl = (DropDownList)e.Row.Cells[6].FindControl("ddlIssueState");
Microsoft.Web.UI.AsyncPostBackTrigger trigger = new Microsoft.Web.UI.AsyncPostBackTrigger();
trigger.ControlID = ddl.UniqueID.ToString();
trigger.EventName = "SelectedIndexChanged";
ajaxCCPack.Triggers.Add(trigger);
}
}
catch (Exception ex)
{
throw ex;
}
}

But I am getting the following error :
A control with ID 'ddlIssueState' could not be found for the trigger in UpdatePanel 'ajaxCCPack'.

Please suggest the right way of doing this

You can not trigger the?asynchronous?postback events of?the asp:DropDownList named "ddlIssueState" which?is?in?the?"ajaxIssueSummary"?
UpdatePanel?from?another?UpdatePanel?called?"ajaxCCPack".
Here is a solution for you to solve the issues.
Place two asp:GridViews in the same asp:UpdatePanel and set?asp:PostBackTrigger?to?asp:GridView?named?"dgIssueSummary" through the triggers of the asp:Updatepanel named "ajaxIssueSummary".When?the?SelectedIndexChanged?event?of?the?asp:DropDownList?named?
"ddlIssueState"?happens, try?to?trigger?the?second?asp:GridView?named?"dgCCPack".It?should?work?fine.
Wish this can help you.

No comments:

Post a Comment