I have a Page which has a 2 level web tab . The Content tabs FIXED and VARIABLE in turn has a web tab. This web tab is loaded with a User control which has a gridview.
My problem is the textboxes in the Gridview are not cleared on going from one sub tab to next sub tab . I tried all possible methods :
1.Bind grid to null ( datasource and DatasoruceId )
2. grid dispose
3. grid columns clear
No luck !!!.. HELP!!!
Note : I am modifying the data in the textboxes from javascript.
<ig:Webtab id="wi" runat="server" width="938px" displaymode="Scrollable" meta:resourcekey="wtabInvestmentTypeResource1">
<ClientEvents SelectedIndexChanging="webTab_SelectedIndexChanging" />
<AutoPostBackFlags SelectedIndexChanged="On" />
<Tabs>
<ig:ContentTabItem runat="server" Text="Variable Investment Type" meta:resourcekey="ContentTabItemResource1">
<Template>
<div class="clear vspacesmall hspacenarrow">
</div>
<ig:WebTab ID="wv" runat="server" Width="908px" DisplayMode="Scrollable" ClientIDMode="Static"
meta:resourcekey="wtabVariableResource1">
<ClientEvents SelectedIndexChanging="webTab_SelectedIndexChanging" />
<AutoPostBackFlags SelectedIndexChanged="On" />
</ig:WebTab>
</Template>
</ig:ContentTabItem>
<ig:ContentTabItem runat="server" Text="Fixed Investment Type" meta:resourcekey="ContentTabItemResource2">
<Template>
<div class="clear vspacesmall hspacenarrow">
</div>
<ig:WebTab ID="wf" runat="server" Width="908px" DisplayMode="Scrollable" class="tabs"
meta:resourcekey="wtabFixedResource1">
<ClientEvents SelectedIndexChanging="webTab_SelectedIndexChanging" />
<AutoPostBackFlags SelectedIndexChanged="On" />
</ig:WebTab>
The web tab loads a user control which has the following gridview :
<div class="clear vspacesmall gridtablearea scrollPanel-horizontal Contol-Max-Height">
<asp:UpdatePanel ID="upBuyMultipleGetDiscount" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:GridView ID="gvInvestmentDetails" runat="server" OnRowDataBound="gvInvestmentDetails_RowDataBound"
TabIndex="5" AutoGenerateColumns="False" CssClass="gridtable scrollPanel-horizontal" Width="100%" meta:resourcekey="gvInvestmentDetails_DefaultResource1"
EnableViewState="true" ViewStateMode="Enabled" ShowFooter="true" OnRowCommand="gvInvestmentDetails_Row_Command">
<Columns>
<asp:BoundField DataField="InvestmentTypeId" />
<asp:BoundField DataField="CustomerCombinationId" />
<asp:BoundField DataField="ProductId" />
<asp:TemplateField HeaderText="Account" ItemStyle-Width="100px" meta:resourcekey="Account">
<ItemTemplate>
<asp:Label ID="lblAccountName" runat="server" Text='<%# Eval("CustomerCombinationName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Products" ItemStyle-Width="200px" meta:resourcekey="Products">
<ItemTemplate>
<asp:Label ID="lblProductName" runat="server" Text='<%# Eval("ProductName") %>'></asp:Label>
</ItemTemplate>
<FooterTemplate>
<asp:Label ID="lblTotal" CssClass="fRight boldText" ForeColor="#656565" runat="server" Text='TOTAL :' meta:resourcekey="lblTotal"></asp:Label>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Phase Investment Amount" meta:resourcekey="PhaseInvestmentAmount" >
<ItemTemplate>
<asp:Repeater ID="rptrPhases" runat="server" ClientIDMode="Static" OnDataBinding="rptrPhases_OnDataBinding">
<ItemTemplate>
<div style="float: left; padding: 4px;">
<table id="PhaseDetails">
<tr>
<td>
<tr>
<asp:Label ID="lblPhaseID" runat="server" Text='<%# Eval("PhaseID") %>' Visible="False"></asp:Label>
<asp:Label ID="lblPhaseName" Class="vspacesmall" runat="server" Text='<%# Eval("PhaseName") %>' ></asp:Label><br />
<asp:TextBox ID="txtPhaseAmount" runat="server" Text='<%# Eval("PhaseAmount", "{0:F2}") %>' CssClass="tar"
ClientIDMode="Static" Width="80px" MaxLength="27" onpaste="return false;" ViewStateMode="Enabled"
meta:resourcekey="txtPhaseAmount"></asp:TextBox>
</tr>
<tr>
<asp:Label ID="lblUsageAmount" runat="server" Visible="false" Text='<%# Eval("PhaseUpdateAmount", "{0:F2}") %>'></asp:Label>
</tr>
</td>
</tr>
</table>
</div>
</ItemTemplate>
</asp:Repeater>
</ItemTemplate>
<FooterTemplate>
<asp:Repeater ID="rptTotalAmount" runat="server" ClientIDMode="Static">
<ItemTemplate>
<div style="float: left; padding: 4px;">
<table>
<tr>
<td>
<asp:TextBox ID="txtPhaseTotal" Text='<%# Eval("PhaseAmount", "{0:F2}") %>' Width="80px" CssClass="tar boldText"
ForeColor="#656565" runat="server" ViewStateMode="Enabled" ClientIdMode="Static" autocomplete="off" ></asp:TextBox>
</td>
</tr>
</table>
</div>
</ItemTemplate>
</asp:Repeater>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Roles" ItemStyle-Width="150px" meta:resourcekey="Roles">
<ItemTemplate>
<asp:CheckBoxList ID="chckRoleList" runat="server" DataTextField="RoleName"
DataValueField="RoleId" EnableViewState="true" ViewStateMode="Enabled" onclick="checkBoxLstChanged(this.id,'chkSelectAll');SetIsChanged('1');">
</asp:CheckBoxList>
<asp:RadioButtonList ID="rdbRoleList" runat="server" DataTextField="RoleName"
DataValueField="RoleId" EnableViewState="true" ViewStateMode="Enabled">
</asp:RadioButtonList>
</ItemTemplate>
<FooterTemplate>
<asp:CheckBox ID="chckSelectAll" runat="server" Text="Select All" onclick="setAllCheckBoxes('chckRoleList',this);SetIsChanged('1');" meta:resourcekey="chckSelectAll">
</asp:CheckBox>
<br>
<asp:Button ID="btnRemove" runat="server" CssClass="btnStyle fLeft" Text="Remove" OnClientClick="return ValidateRemoveRoles('gvInvestmentDetails')"
CommandName="RemoveRoles" CommandArgument='<%# Container.DataItemIndex %>'
meta:resourcekey="btnRemove" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="InvestmentAmount" meta:resourcekey="InvestmentAmount">
<ItemTemplate>
<asp:TextBox ID="txtInvAmt" Width="80px" runat="server" Text='<%# Eval("InvestmentAmount","{0:F2}") %>'
ClientIdMode="Static" ViewStateMode="Enabled" CssClass="fRight tar boldText" ></asp:TextBox >
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtTotalInvestment" ClientIdMode="Static" Width="80px" ViewStateMode="Enabled" CssClass="fRight tar boldText " ForeColor="#656565" runat="server" />
</FooterTemplate>
</asp:TemplateField>
<asp:BoundField DataField="RecordStatus" />
</Columns>
<%-- <FooterStyle HorizontalAlign="Left" CssClass="boldText" ForeColor="#656565" />--%>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</div>
The back end code for loading the USer control :
private void LoadInvestmentDetails(int investmentTypeId, WebTab currentWebTab, int tabIndex)
{
Panel panel = GetPanelToBeLoaded(investmentTypeId);
if (currentWebTab.Tabs[tabIndex].Controls.Count == 0)
{
currentWebTab.Tabs[tabIndex].Controls.Add(panel);
budgetDetailsControl.Initialize(investmentTypeId);
budgetDetailsControl.InvestmentDetailsSaved += new ProjectInvestmentDetailsSavedEventHandler(BudgetDetailsControl_BudgetDetailsSaved);
PreviouslyLoadedTab = int.Parse(currentWebTab.Tabs[currentWebTab.SelectedIndex].UserControlUrl);
}
// other code
}
private Panel GetPanelToBeLoaded(int investmentTypeId)
{
System.Web.UI.Control userControl = GetInvestmentDetailsUserControlUrl();
Panel panel = new Panel();
panel.Controls.Add(userControl);
budgetDetailsControl = (IProjectInvestmentDetailsControl)userControl;
budgetDetailsControl.InvestmentTypeID = investmentTypeId;
return panel;
}
private System.Web.UI.Control GetInvestmentDetailsUserControlUrl()
{
return LoadControl(ProjectCommonKeys.URL_PROJECT_BUDGET_DETAILS);
}
The Usercontrol implments the IprojectInvestmentDetails interface and the initalize function of the UC is called first for the binding etc
I figured out the problem. Each user control bound to the sub tab shud be given a unique Id..or else even if we bind new data the data from the earlier instance will persist.
.
private Panel GetPanelToBeLoaded(int investmentTypeId)
{
System.Web.UI.Control userControl = GetInvestmentDetailsUserControlUrl();
**userControl.ID = investmentTypeId.ToString();**
Panel panel = new Panel();
panel.Controls.Add(userControl);
projectInvestmentDetailsControl = (IProjectInvestmentDetailsControl)userControl;
projectInvestmentDetailsControl.InvestmentTypeID = investmentTypeId;
projectInvestmentDetailsControl.UserContext = userContext;
projectInvestmentDetailsControl.PlanningWizardDataManager = PlanningWizardDataManager;
projectInvestmentDetailsControl.PlanningServiceWrapper = PlanningServiceWrapper;
return panel;
}`
Thanks fr the help...
Related
This is my GridView:
<asp:GridView ID="GridView1" runat="server" BorderColor="#ececec" BorderWidth="2px" HeaderStyle-BackColor="#F6F6F6" HeaderStyle-Font-Bold="true" RowStyle-BackColor="white" AlternatingRowStyle-BackColor="#F6F6F6" AutoGenerateColumns="False" ShowFooter="true" DataKeyNames="UsuarioId" ShowHeaderWhenEmpty="True" OnRowCommand="GridView1_OnRowCommand" OnRowEditing="GridView1_OnRowEditing" OnRowCancelingEdit="GridView1_OnRowCancelingEdit" OnRowUpdating="GridView1_OnRowUpdating" OnRowDeleting="GridView1_OnRowDeleting" Width="100%" CssClass="GridViewStyle" >
<EmptyDataTemplate>
<div>
No hay datos para mostrar :(
</div>
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="Tipo Usuario ID (Dato momentaneo)">
<ItemTemplate>
<asp:Label Text='<%#Eval("tipo") %>' runat="server">
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtTipoUsuarioId" Text='<%#Eval("tipo") %>' runat="server" ></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:DropDownList ID="dropdown" runat="server" AppendDataBoundItems="True" DataTextField="tipoUsuario" DataValueField="tipoUsuarioId" DataSourceID="sqlDB" CssClass="ddl">
</asp:DropDownList>
<asp:SqlDataSource ID="sqlDB" ConnectionString="<%$ ConnectionStrings:conn%>" runat="server" SelectCommand="Select * from Tipo_Usuario"></asp:SqlDataSource>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Nombre">
<ItemTemplate>
<asp:Label Text='<%#Eval("nombre") %>' runat="server">
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtNombre" Text='<%#Eval("nombre") %>' runat="server" required="true"></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtNombreFooter" runat="server"></asp:TextBox>
<br/>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1" ForeColor="Red" runat="server" ValidationGroup="Group1" ControlToValidate="txtNombreFooter"
ErrorMessage="Requiere nombre!"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Contraseña">
<ItemTemplate>
<asp:Label Text='<%#Eval("contraseña") %>' runat="server" >
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtContraseña" Text='<%#Eval("contraseña") %>' runat="server" required="true" ></asp:TextBox>
</EditItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtContraseñaFooter" runat="server" ></asp:TextBox>
<br/>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator2" ForeColor="Red" runat="server" ValidationGroup="Group1" ControlToValidate="txtContraseñaFooter"
ErrorMessage="Requiere contraseña!"></asp:RequiredFieldValidator>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Habilitado">
<ItemTemplate>
<asp:Label id="habilitado" Text='<%#Eval("habilitado") %>' runat="server">
</asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtHabilitado" Text='<%#Eval("habilitado") %>' runat="server" ></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton CssClass="btn btn-warning" BackColor="#EC971F" Text="Editar" ForeColor="white" CommandName="Edit" runat="server" ><i class="fa fa-pencil" aria-hidden="true"></i></asp:LinkButton>
<asp:LinkButton CssClass="btn btn-danger" Text="Borrar" CommandName="Delete" runat="server" > <i class="fa fa-trash-o" aria-hidden="true"></i></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
<asp:ImageButton ImageUrl="Assets/ICONS/Save.png" CommandName="Update" ToolTip="Update" Width="20" Height="20" runat="server"/>
<asp:ImageButton ImageUrl="Assets/ICONS/Cancel.png" CommandName="Cancel" ToolTip="Cancel" Width="20" Height="20" runat="server"/>
</EditItemTemplate>
<FooterTemplate>
<asp:ImageButton ImageUrl="Assets/ICONS/xls.png" OnClick="ExportDataToExcel" Width="40" Height="40" runat="server"/>
<asp:LinkButton CssClass="btn btn-success" Text="Agregar" CommandName="Agregar" runat="server" ValidationGroup="Group1"></asp:LinkButton>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
This is the code to export:
public void ExportDataToExcel(object sender, EventArgs e)
{
GridView1.AllowPaging = false;
GridView1.AllowSorting = false;
GridView1.AutoGenerateEditButton = false;
GridView1.AutoGenerateDeleteButton = false;
Response.ClearContent(); //Clear any content
Response.AppendHeader("content-disposition","attachment; filename=Usuarios.xls"); //Export as XLS (Excel)
Response.ContentType = "application/excel";
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter); //Saves all the content including rows.
GridView1.RenderControl(htmlTextWriter);
Response.Write(stringWriter.ToString()); //Gridview data is going to be converted for a xls file
Response.End();
}
This is what I get:
Like I said on the title, I want to hide TextBox and buttons while exporting to excel in order to only see the data. Those controls are inside EditItemTemplate tags. On the aspx website the GridView show data from SQL server database, what I want to do is to export it as a table.
how can i get selected value of dropdownlist on nested gridview row command.
I have a nested gridview in my page, inside of second gridview i want to use a drop down list for Driver. I am trying to get the selected value for that drop down list but unable to got it in gridview rowcommand. i try button click event also but i am unable to got it.
<asp:GridView ID="dtgNewTrips" runat="server" AllowPaging="true" AutoGenerateColumns="false" CssClass="table table-striped table-bordered table-hover" OnRowDataBound="dtgNewTrips_RowDataBound" DataKeyNames="Trips_ID">
<Columns>
<asp:TemplateField ItemStyle-Width="20px">
<ItemTemplate>
<a href="JavaScript:ViewDetails('div<%# Eval(" Trips_ID ") %>');">
<img alt="City" id="imgdiv<%# Eval("Trips_ID") %>" src="Images/Icons/plusicon.png" />
</a>
<div id="div<%# Eval(" Trips_ID ") %>" style="display: none;">
<asp:GridView ID="dtgViewDetails" runat="server" AutoGenerateColumns="false" DataKeyNames="Trips_ID" CssClass="ChildGrid" ShowHeader="false" OnRowDataBound="dtgViewDetails_RowDataBound" OnRowCommand="dtgViewDetails_RowCommand">
<Columns>
<asp:TemplateField ShowHeader="false">
<ItemTemplate>
<div>
<table style="width: 100%;">
<tr>
<td>Adults:
<asp:Label ID="lblTrip_ID" runat="server" Text='<%#Eval("Trips_ID") %>' Visible="false"></asp:Label>
<asp:Label ID="Label1" runat="server" Text='<%#Eval("AdultsCount") %>'></asp:Label>
</td>
<td>Children:
<asp:Label ID="Label2" runat="server" Text='<%#Eval("ChildrensCount") %>'></asp:Label>
</td>
<td>Passenger Comments:
<asp:Label ID="Label4" runat="server" Text='<%#Eval("PassengerComments") %>'></asp:Label>
</td>
</tr>
<tr>
<td>Trip Stops:</td>
<td>
<asp:Label ID="Label3" runat="server" Text='<%#Eval("TripStops") %>'></asp:Label>
</td>
<td>TripStops Comments:
<asp:Label ID="Label5" runat="server" Text='<%#Eval("TripStopsComments") %>'></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:DropDownList ID="ddlDriver" runat="server" DataTextField="DriverName" DataValueField="DriversInfo_ID" CssClass="form-control" AutoPostBack="false"></asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
</td>
<td>
<asp:Button ID="btnAssign" runat="server" Text="Assign To Driver" CssClass="btn btn-primary" CommandArgument='<%# ((GridViewRow)Container).RowIndex %>' CommandName="Assign" />
</td>
<td>
<asp:Button ID="btnAssignToAll" runat="server" OnClick="btnAssignToAll_Click" Text="Notify All Drivers" CssClass="btn btn-primary" />
<asp:Button ID="btnCancelTrip" runat="server" OnClick="btnCancelTrip_Click" Text="Cancel Trip" CssClass="btn btn-warning" />
</td>
</tr>
</table>
</div>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Trip No">
<ItemTemplate>
<asp:Label ID="lblTripRefID" runat="server" Text='<%#Eval("TripRefID") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Customer Name">
<ItemTemplate>
<asp:Label ID="lblCompanyName" runat="server" Text='<%#Eval("CompanyName") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Pickup Location">
<ItemTemplate>
<asp:Label ID="lblPickupLocation" runat="server" Text='<%#Eval("PickupLocation") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
C# Code
protected void dtgViewDetails_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "Assign")
{
int rowIndex = Convert.ToInt32(e.CommandArgument);
GridView grid = (GridView)sender;
if (grid.ID == "dtgViewDetails")
{
Label lblTrip_ID = (Label)grid.Rows[rowIndex].FindControl("lblTrip_ID");
DropDownList ddlDriver = (DropDownList)grid.Rows[rowIndex].FindControl("ddlDriver");
}
}
}
But i get the by default of dropdownlist that zeroth index value.
please help me..
thanks in advance..
Is anyone able to understand why m I getting this error?
Uncaught Sys.WebForms.PageRequestManagerServerErrorException: Sys.WebForms.PageRequestManagerServerErrorException: Object reference not set to an instance of an object.
SOURCE: ScriptResource.axd
So here is the thing...
I have a button when first clicked (after first site access) works, but after that I always get the error. I tried to debug the subject by putting a debug point at the first line in Page_Load event but its not even getting there.
The error is showing before that on that ScriptResources.axd file which is made of javascript so i tried to debug it but i don't really understand what is going on so i couldn't find the problem.
From what i can understand, somehow, when i first click the button, i must not being initialize some controll i should, but i just can't figure it out.
button id = btnFiltra
HTML
<body>
<form id="form1" runat="server">
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
</asp:ToolkitScriptManager>
<script type="text/javascript">
Sys.Application.add_load(onPageLoad);
</script>
<asp:Panel runat="server" ID="pHeader" CssClass="PVHeaderBackground">
<img alt="Planview" src="Images/logo_planview.png" class="PVLogoBackImgleft"/>
<div id="PTLogo" class="PTLogosRight">
<img src="Images/logo_meo_preto.png" alt="Meo" style="vertical-align:middle; margin-top:auto; margin-bottom:auto"/>
<img src="Images/Ptlogo.jpg" alt="PT" style="height:50px; width:auto; margin-left:10px; vertical-align:middle;margin-top:auto; margin-bottom:auto"/>
</div>
</asp:Panel>
<asp:UpdatePanel ID="upBody" runat="server" UpdateMode="Conditional" >
<ContentTemplate>
<asp:Panel runat="server" ID="pOpcoesGlobais" >
<asp:Button ID="btnExtrair" runat="server" OnClientClick="umProjetoApenas()" OnClick="btnExtrair_OnClick" Text="Extrair Dados"/>
<asp:Button ID="btnAtualizar" runat="server" OnClientClick="umProjetoApenas()" OnClick="btnAtualizar_OnClick" Text="Atualizar Dados"/>
</asp:Panel>
<asp:Panel runat="server" ID="pTarefaOkFaturar" Visible="true" style="display:none;" Width="100%" Height="100%" >
<div style="width:100%; height:10%">
<b>Ao confirmar que a tarefa pode ser faturada, todas as parcelas sem documento passarão a ser faturadas de forma automática.</b>
</div>
<div style="width:100%;">
<asp:GridView runat="server" ID="gvCheckParcelas" CssClass="PVPortlet"></asp:GridView>
</div>
<div style="width:100%;position: absolute;bottom: 10px;">
<asp:Button ID="btnOkFaturarCancelar" runat="server" Text="Cancelar" OnClick="btnOkFaturarCancelar_OnClick" style="float:left;margin-left: 10px;"/>
<asp:Button ID="btnOkFaturarOk" runat="server" Text="Concordo" OnClick="btnOkFaturarOk_OnClick" style="float:right;margin-right: 10px;" />
</div>
</asp:Panel>
<asp:Panel runat="server" ID="pBody">
<asp:UpdatePanel ID="upFiltros" runat="server">
<ContentTemplate>
<asp:Label ID="lCliente" runat="server" Text="Cliente"/>
<asp:TextBox ID="txbCliente" runat="server"/>
<asp:PopupControlExtender ID="txbCliente_PopupControlExtender" runat="server" Enabled="True" ExtenderControlID="" TargetControlID="txbCliente"
PopupControlID="pPopUpCliente" Position="Bottom" >
</asp:PopupControlExtender>
<asp:Panel ID="pPopUpCliente" runat="server" Height="116px" BorderStyle="Solid" BorderWidth="2px" Direction="LeftToRight" ScrollBars="Auto" BackColor="#CCCCCC" Style="display: none" >
<asp:CheckBoxList ID="cblCliente" runat="server" DataTextField="DESCRICAO" onChange="uncheckOnTodos(this)" DataValueField="ID" AutoPostBack="False" AppendDataBoundItems="True">
<asp:ListItem Text="Todos" Value="all" Selected="False"></asp:ListItem>
</asp:CheckBoxList>
</asp:Panel>
<asp:Label ID="lPedido" runat="server" Text="Pedido"/>
<asp:TextBox ID="txbPedido" runat="server"/>
<asp:PopupControlExtender ID="txbPedido_PopupControlExtender" runat="server"
Enabled="True" ExtenderControlID="" TargetControlID="txbPedido"
PopupControlID="pPopUpPedido" Position="Bottom" >
</asp:PopupControlExtender>
<asp:Panel ID="pPopUpPedido" runat="server" Height="116px"
BorderStyle="Solid" BorderWidth="2px" Direction="LeftToRight"
ScrollBars="Auto" BackColor="#CCCCCC" Style="display: none" >
<asp:CheckBoxList ID="cblPedido" runat="server"
DataTextField="DESCRICAO" onChange="uncheckOnTodos(this)"
DataValueField="ID" AutoPostBack="False" AppendDataBoundItems="True">
<asp:ListItem Text="Todos" Value="all" Selected="False"></asp:ListItem>
</asp:CheckBoxList>
</asp:Panel>
<asp:Label ID="lProjeto" runat="server" Text="Projeto"/>
<asp:TextBox ID="txbProjeto" runat="server"/>
<asp:PopupControlExtender ID="txbProjeto_PopupControlExtender" runat="server"
Enabled="True" ExtenderControlID="" TargetControlID="txbProjeto"
PopupControlID="pPopUpProjeto" Position="Bottom" >
</asp:PopupControlExtender>
<asp:Panel ID="pPopUpProjeto" runat="server" Height="116px"
BorderStyle="Solid" BorderWidth="2px" Direction="LeftToRight" ScrollBars="Auto" BackColor="#CCCCCC" Style="display: none" >
<asp:CheckBoxList ID="cblProjeto" runat="server"
DataTextField="DESCRICAO" onChange="uncheckOnTodos(this)"
DataValueField="ID" AutoPostBack="False" AppendDataBoundItems="True">
<asp:ListItem Text="Todos" Value="all" Selected="False"></asp:ListItem>
</asp:CheckBoxList>
</asp:Panel>
<asp:Button runat="server" ID="btnFiltra" Text="Pesquisar"
onclick="btnFiltra_Click"/>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="uprgTarefas" runat="server" AssociatedUpdatePanelID="upTarefas" DisplayAfter="2000" >
<ProgressTemplate>Loading...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="upTarefas" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnFiltra" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnAtualizar" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="btnExtrair" EventName="Click" />
</Triggers>
<ContentTemplate>
<div id="dTabelaTarefaHeader" class="PVPortletHeader">
<div id="dTabelaTarefasOpcoes" class="PVPortletHeaderOpcoes"></div>
<b>Tarefas Faturação</b>
</div>
<asp:Panel runat="server" ID="pgvTarefasEmpty" Visible="false">
<table class="PVPortlet">
<tbody>
<tr>
<th></th>
<th>ID</th>
<th>Projeto</th>
<th>Tarefa</th>
<th>Cliente</th>
<th>Pedido</th>
<th>Inicio</th>
<th>Fim</th>
<th>Faturar?</th>
<th>Planeado</th>
<th>Remanescente</th>
<th>Faturado</th>
<th>Entidade</th>
</tr>
<tr>
<td colspan="13">Sem dados...</td>
</tr>
</tbody>
</table>
</asp:Panel>
<asp:GridView ID="gvTarefas" runat="server" AutoGenerateSelectButton="true"
AutoGenerateColumns="false" CssClass="PVPortlet" SelectedRowStyle-CssClass="PVPortletSelectedRow"
onselectedindexchanged="gvTarefas_SelectedIndexChanged" DataKeyNames="ID"
OnRowCreated="gvTarefas_OnRowCreated">
<columns>
<asp:BoundField DataField="ID" HtmlEncode="false" HeaderText="ID" />
<asp:BoundField DataField="Projeto" HtmlEncode="false" HeaderText="Projeto" />
<asp:BoundField DataField="Tarefa" HtmlEncode="false" HeaderText="Tarefa" />
<asp:BoundField DataField="Cliente" HtmlEncode="false" HeaderText="Cliente" />
<asp:BoundField DataField="Pedido" HtmlEncode="false" HeaderText="Pedido" />
<asp:BoundField DataField="DataInicio" DataFormatString="{0:dd-MM-yyyy}" HeaderText="Inicio" />
<asp:BoundField DataField="DataFim" DataFormatString="{0:dd-MM-yyyy}" HeaderText="Fim" />
<asp:TemplateField HeaderText="Faturar?">
<ItemTemplate>
<asp:CheckBox runat="server" ID="cbFaturar" Checked='<%# Eval("ProntoAFaturar") %>' AutoPostBack="true" OnCheckedChanged="cb_OnCheckedChanged"/>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Planeado" HeaderText="Planeado" />
<asp:BoundField DataField="Remanescente" HeaderText="Remanescente" />
<asp:BoundField DataField="Faturado" HeaderText="Faturado" />
<utl:CompositeBoundField HeaderText="Entidade" DataField="EntidadeResponsavel.Descricao" />
</columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
<br />
<br />
<asp:UpdateProgress ID="uprgParcelas" runat="server"
AssociatedUpdatePanelID="upParcelas" DisplayAfter="2000">
<ProgressTemplate>Loading...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="upParcelas" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:asyncpostbacktrigger controlid="gvTarefas"
EventName="SelectedIndexChanged" />
<asp:asyncpostbacktrigger controlid="gvParcelas" EventName="RowEditing" />
</Triggers>
<ContentTemplate>
<div ID="dTabelaParcelasHeader" class="PVPortletHeader">
<b>Parcelas Faturação</b>
</div>
<asp:Panel ID="pgvParcelasEmpty" runat="server" Visible="false">
<table class="PVPortlet">
<tbody>
<tr>
<th></th>
<th>ID</th>
<th>Auto</th>
<th>DataEnvio</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
<tr>
<td colspan="6">Sem dados...</td>
</tr>
</tbody>
</table>
</asp:Panel>
<asp:GridView ID="gvParcelas" runat="server" AutoGenerateColumns="false" AutoGenerateDeleteButton="true" AutoGenerateEditButton="true"AutoGenerateSelectButton="true" CssClass="PVPortlet" DataKeyNames="ID" OnRowCancelingEdit="gvParcelas_OnRowCancelingEdit"
OnRowCommand="gvParcelas_OnRowCommand" OnRowCreated="gvParcelas_OnRowCreated" OnRowDeleting="gvParcelas_OnRowDeleting" OnRowEditing="gvParcelas_RowEditing" OnRowUpdating="gvParcelas_OnRowUpdating" Visible="false" SelectedRowStyle-CssClass="PVPortletSelectedRow"
OnSelectedIndexChanged="obterDocumento_OnSeacrh" ShowFooter="True">
<Columns>
<asp:TemplateField HeaderText="ID">
<EditItemTemplate>
<asp:Label ID="lIDParcela" runat="server" Text='<%# Eval("ID") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lIDParcela" runat="server" Text='<%# Eval("ID") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="btnParcelaNovo" runat="server" CommandName="Insert" Text="Novo" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Auto">
<EditItemTemplate>
<asp:CheckBox ID="cbAuto" runat="server" Checked='<%# Eval("Auto") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="cbAuto" runat="server" Checked='<%# Eval("Auto") %>' Enabled="false"/>
</ItemTemplate>
<FooterTemplate>
<asp:CheckBox ID="cbAuto" runat="server" Checked="true" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="DataEnvio">
<EditItemTemplate>
<asp:TextBox ID="txbDataEnvio" runat="server" Text='<%# Eval("DataEnvio","{0:dd-MM-yyyy}") %>' />
<asp:CalendarExtender ID="txbDataEnvio_CalendarExtender" runat="server"
DefaultView="Months" Enabled="True" Format="MM-yyyy" PopupPosition="BottomLeft"
TargetControlID="txbDataEnvio">
</asp:CalendarExtender>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lDataEnvio" runat="server"
Text='<%# Eval("DataEnvio","{0:dd-MM-yyyy}") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txbDataEnvio" runat="server" Text="" />
<asp:CalendarExtender ID="txbDataEnvio_CalendarExtender" runat="server"
DefaultView="Months" Enabled="True" Format="MM-yyyy" PopupPosition="BottomLeft"
TargetControlID="txbDataEnvio">
</asp:CalendarExtender>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Descrição">
<EditItemTemplate>
<asp:TextBox ID="txbDescricao" runat="server" Text='<%# Eval("Descricao") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lDescricao" runat="server" Text='<%# Eval("Descricao") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txbDescricao" runat="server" Text="" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Valor">
<EditItemTemplate>
<asp:TextBox ID="txbValor" runat="server" Text='<%# Eval("Valor") %>' />
<asp:FilteredTextBoxExtender ID="txbValor_FilteredTextBoxExtender" runat="server" FilterType="Custom" TargetControlID="txbValor" ValidChars="0123456789,">
</asp:FilteredTextBoxExtender>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lValor" runat="server" Text='<%# Eval("Valor") %>' />
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txbValor" runat="server" Text="" />
<asp:FilteredTextBoxExtender ID="txbValor_FilteredTextBoxExtender"
runat="server" FilterType="Numbers" TargetControlID="txbValor">
</asp:FilteredTextBoxExtender>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdateProgress ID="uprgDocumentos" runat="server"
AssociatedUpdatePanelID="upDocumentos" DisplayAfter="2000">
<ProgressTemplate>Loading...</ProgressTemplate>
</asp:UpdateProgress>
<asp:UpdatePanel ID="upDocumentos" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<div ID="dTabelaDocumentosHeader" class="PVPortletHeader">
<div ID="dTabelaDocumentosOpcoes" class="PVPortletHeaderOpcoes">
<asp:Label ID="lDocInicio" runat="server" Text="Inicio" style="float:left;"></asp:Label>
<asp:TextBox ID="txbInicio" runat="server" style="float:left;"></asp:TextBox>
<asp:CalendarExtender ID="txbInicio_CalendarExtender" runat="server" Enabled="True" Format="MM-yyyy" TargetControlID="txbInicio">
</asp:CalendarExtender>
<asp:Label ID="lDocFim" runat="server" Text="Fim" style="float:left;"></asp:Label>
<asp:TextBox ID="txbFim" runat="server" style="float:left;"></asp:TextBox>
<asp:CalendarExtender ID="txbFim_CalendarExtender" runat="server" Enabled="True" Format="MM-yyyy" TargetControlID="txbFim">
</asp:CalendarExtender>
<asp:Button ID="btnDocFiltro" runat="server" Text="Pesquisar" style="float:left;" OnClick="obterDocumento_OnSeacrh"/>
</div>
<b>Documentos Faturação</b>
<asp:Button ID="btnNovoDocumento" runat="server" OnClientClick="abrirDocumento(0);" Text="Novo" style="float:right;"/>
</div>
<asp:Panel ID="pgvDocumentosEmpty" runat="server" Visible="false">
<table class="PVPortlet">
<tbody>
<tr>
<th></th>
<th>ID</th>
<th>Fatura</th>
<th>Enviado</th>
<th>Estado</th>
<th>Tipo</th>
<th>Descrição</th>
<th>Valor</th>
</tr>
<tr>
<td colspan="8">Sem dados...</td>
</tr>
</tbody>
</table>
</asp:Panel>
<asp:GridView ID="gvDocumentos" runat="server" AutoGenerateColumns="false" AutoGenerateDeleteButton="false" AutoGenerateEditButton="false" AutoGenerateSelectButton="false" CssClass="PVPortlet">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:LinkButton Text="Abrir" runat="server" ID="lbtnAbrirDoc" OnClientClick='<%#"abrirDocumento(" + Eval("ID") + ");"%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ID" HeaderText="ID" HtmlEncode="false" />
<asp:BoundField DataField="NFATURA" HeaderText="Fatura" HtmlEncode="false" />
<asp:BoundField DataField="EnviadoA" DataFormatString="{0:dd-MM-yyyy}" HeaderText="Enviado" HtmlEncode="false" />
<utl:CompositeBoundField DataField="Estado.Descricao" HeaderText="Estado" HtmlEncode="false" />
<utl:CompositeBoundField DataField="Tipo.Descricao" HeaderText="Tipo" HtmlEncode="false" />
<asp:TemplateField HeaderText="Descrição">
<ItemTemplate>
<asp:Label ID="lCabecalho" runat="server" Text='<%#Eval("Cabecalho").ToString().Cut(30,true)+"-"+Eval("Periodo")%>' />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Valor" HeaderText="Valor" HtmlEncode="false" />
</Columns>
</asp:GridView>
</ContentTemplate>
</asp:UpdatePanel>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
Server SIde
protected void Page_Load(object sender, EventArgs e)
{
userName = HttpContext.Current.User.Identity.Name.ToString().ToUpper();
sessionID = Session.SessionID;
if (!IsPostBack)
{
Session["USER_" + sessionID] = userName;
Session["TAREFAS_INV_" + sessionID] = null;
Session["PARCELAS_"+sessionID] = null;
Session["DOCUMENTOS_"+sessionID] = null;
carregaDadosFiltros();
string idPrj = null;
obtemParametrosEntrada(ref idPrj);
pgvDocumentosEmpty.Visible = true;
pgvParcelasEmpty.Visible = true;
pgvTarefasEmpty.Visible = true;
gvDocumentos.Visible = false;
gvParcelas.Visible = false;
gvTarefas.Visible = false;
if (!string.IsNullOrEmpty(idPrj))
{
bool filtra = true;
if (cblProjeto.Items.FindByValue(idPrj) != null)
{
cblProjeto.SelectedValue = idPrj;
}
else
{
string nome = InvDataAccess.obterNomeProjeto(idPrj);
if(!string.IsNullOrEmpty(nome))
{
ListItem prj = new ListItem(nome, idPrj, true);
cblProjeto.Items.Add(prj);
cblProjeto.SelectedValue = prj.Value;
}
else
filtra = false;
}
cblCliente.SelectedValue = "all";
cblPedido.SelectedValue = "all";
if(filtra) btnFiltra_Click(null, null);
}
}
else
{
userName = Session["USER_" + sessionID] as string;
DateTime inicio = DateTime.MinValue, fim = DateTime.MaxValue;
if (!DateTime.TryParseExact(txbInicio.Text, txbInicio_CalendarExtender.Format, null, System.Globalization.DateTimeStyles.None, out inicio))
txbInicio_CalendarExtender.SelectedDate = DateTime.MinValue;
if (!DateTime.TryParseExact(txbFim.Text, txbFim_CalendarExtender.Format, null, System.Globalization.DateTimeStyles.None, out fim))
txbFim_CalendarExtender.SelectedDate = DateTime.MaxValue;
if (Session["TAREFAS_INV_"+sessionID] != null)
tarefas = (Dictionary<int, InvTarefas>)Session["TAREFAS_INV_"+sessionID];
if (Session["PARCELAS_"+sessionID] != null)
{
parcelas = (Dictionary<int, InvParcelaTarefa>)Session["PARCELAS_"+sessionID];
gvParcelas.DataSource = parcelas.Values.ToList();
}
if (Session["DOCUMENTOS_"+sessionID] != null)
{
documentos = (Dictionary<int, InvDocumento>)Session["DOCUMENTOS_"+sessionID];
gvDocumentos.DataSource = documentos.Values.ToList();
}
}
}
protected void btnFiltra_Click(object sender, EventArgs e)
{
tarefas.Clear();
List<string> idCliente, idPedido, idProjeto;
DateTime inicio, fim;
idCliente = cblCliente.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value).ToList();
idPedido = cblPedido.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value).ToList();
idProjeto = cblProjeto.Items.Cast<ListItem>().Where(i => i.Selected).Select(i => i.Value).ToList();
inicio = DateTime.MinValue;
fim = DateTime.MaxValue;
List<InvTarefas> tars = InvTarefas.getInvTarefas(new List<string>{"all"}, idCliente, idPedido, idProjeto, inicio, fim);
if (tars != null && tars.Count > 0)
{
foreach (InvTarefas tar in tars)
{
tarefas.Add(tar.ID, tar);
}
this.Session["TAREFAS_INV_"+sessionID] = tarefas;
gvTarefas.DataSource = tarefas.Values.ToList();
gvTarefas.DataBind();
pgvTarefasEmpty.Visible = false;
gvTarefas.Visible = true;
}
else
{
this.Session["TAREFAS_INV_"+sessionID] = null;
pgvTarefasEmpty.Visible = true;
gvTarefas.Visible = false;
}
}
After some help from a colleague, we found that the gvTarefas_OnRowCreated event was firing before the Page_load and that the code inside was trowing null exception.
I was also advised to change my event to OnRowDataBound.
Also, for those of you who didn't knew you can set (when in trouble, otherwise is to much load) VS to stop on the line that throwed the exception by going Debug->Exceptions->Throw in Common Language Runtime Exceptions. If i knew this I probably had solved it right away.
Now, about the strange OnRowCreated before Page_Load, i still can't understand, but something tells me it's because of my UpdatePanel upBody that catches most of the page and its update mode is in Always (is the default value).
Last, i'm putting my OnRowCreated code
protected void gvTarefas_OnRowCreated(Object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
InvTarefas tar = e.Row.DataItem as InvTarefas;
if (tar.EntidadeResponsavel != InvEntidadeResponsavel.PV_PROPRIO)
{
e.Row.Enabled = false;
e.Row.CssClass = "PVPortlet_DisabledRoW";
}
}
}
I have a page that displays a GridView containing an ImageButton TemplateField. My goal is to display an AJAX modal popup when one of those buttons are clicked, along with displaying the row where the button is pressed. The problem is that when I click on a button, it does not show the modal popup. I tried to use this tutorial and read several articles on this site about this issue but to no avail. How to properly fire the button event and show the popup?
Here is the snippet for the gridview:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="505px" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="ItemDesc"
SortExpression="ItemDesc" ItemStyle-Width="100px" ItemStyle-Height="100px">
<ItemStyle Height="100px" Width="100px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="Price" SortExpression="Price"
ItemStyle-Width="100px" ItemStyle-Height="100px">
<ItemStyle Height="100px" Width="100px"></ItemStyle>
</asp:BoundField>
<asp:TemplateField>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" Height="200px"
ImageUrl='<%# Eval("ImagePath") %>' Width="200px" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="atc" ImageUrl="~/App_Themes/img/shop/addtocart.png"
Text="Add to Cart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"/>
</ItemTemplate>
<ControlStyle Height="30px" Width="105px" />
<ItemStyle Width="105px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
...
<asp:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="HiddenField1" PopupControlID="Panel1" BackgroundCssClass="modalBg" CancelControlID="btnClose">
</asp:ModalPopupExtender>
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Panel ID="Panel1" runat="server" Width="500" Height="500" Visible="False"
style="background-color:#6f95f4; color:#000000;">
<div class="style1">
<br />
<br />
<br />
<br />
<br />
<table style="width: 90%; height: 71px;">
<tr>
<td>
Item Name</td>
<td>
<asp:Label ID="lblItemName" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td>
Price</td>
<td>
<asp:Label ID="lblPrice" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td>
Quantity</td>
<td>
<asp:TextBox ID="TextBox2" runat="server" Type="Number" Min="1" MaxLength="100"
Width="75px" Height="23px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Total Price</td>
<td>
<asp:Label ID="lblTotalPrice" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
<br />
<br />
<asp:Button ID="btnAddToCart" runat="server" Text="Add to Cart"
onclick="btnAddToCart_Click" />
<br />
<br />
<asp:Button ID="btnClose" runat="server" onclick="btnClose_Click" Text="Close"
Width="199px" />
</div>
</asp:Panel>
And here's my code for the event:
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("atc"))
{
ModalPopupExtender1.Show();
//// Retrieve the row index stored in the
//// CommandArgument property.
int index = Convert.ToInt32(e.CommandArgument);
//// Retrieve the row that contains the button
//// from the Rows collection.
GridViewRow row = GridView1.Rows[index];
lblItemName.Text = row.Cells[0].Text;
lblPrice.Text = row.Cells[1].Text;
Response.Write("<script>alert('" + row.Cells[0].Text + "\n" + row.Cells[1].Text + "');</script>");
//// Add code here to add the item to the shopping cart.
}
}
EDIT: Added the panel code.
Try like this:
100% working and Tested
Use onrowcommand="GridView1_RowCommand" for GridView
Use display:none for Your Panel instead of Visible="false"
I Commented your alert(in rowbound) it contains js error
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" Width="505px"
onrowcommand="GridView1_RowCommand"
>
<Columns>
<asp:BoundField DataField="ItemDesc" SortExpression="ItemDesc" ItemStyle-Width="100px"
ItemStyle-Height="100px">
<ItemStyle Height="100px" Width="100px"></ItemStyle>
</asp:BoundField>
<asp:BoundField DataField="Price" SortExpression="Price" ItemStyle-Width="100px"
ItemStyle-Height="100px">
<ItemStyle Height="100px" Width="100px"></ItemStyle>
</asp:BoundField>
<asp:TemplateField>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Image ID="Image1" runat="server" Height="200px" ImageUrl='<%# Eval("ImagePath") %>'
Width="200px" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:ImageButton ID="ImageButton1" runat="server" CommandName="atc"
CausesValidation="false"
Text="Add to Cart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>" />
</ItemTemplate>
<ControlStyle Height="30px" Width="105px" />
<ItemStyle Width="105px" />
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<ajax:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="Panel1"
PopupControlID="Panel1" OnOkScript="okClick();"
OnCancelScript="cancelClick();"
OkControlID="btnAddToCart" CancelControlID="btnClose">
</ajax:ModalPopupExtender>
<asp:HiddenField ID="HiddenField1" runat="server" />
<asp:Panel ID="Panel1" runat="server" Width="500" Height="500"
style="background-color:#6f95f4; color:#000000;display:none">
<div class="style1">
<br />
<br />
<br />
<br />
<br />
<table style="width: 90%; height: 71px;">
<tr>
<td>
Item Name</td>
<td>
<asp:Label ID="lblItemName" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td>
Price</td>
<td>
<asp:Label ID="lblPrice" runat="server" Text="Label"></asp:Label>
</td>
</tr>
<tr>
<td colspan="2">
</td>
</tr>
<tr>
<td>
Quantity</td>
<td>
<asp:TextBox ID="TextBox2" runat="server" Type="Number" Min="1" MaxLength="100"
Width="75px" Height="23px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
Total Price</td>
<td>
<asp:Label ID="lblTotalPrice" runat="server" Text="Label"></asp:Label>
</td>
</tr>
</table>
<br />
<br />
<asp:Button ID="btnAddToCart" runat="server" Text="Add to Cart"
onclick="btnAddToCart_Click" />
<br />
<br />
<asp:Button ID="btnClose" runat="server" onclick="btnClose_Click" Text="Close"
Width="199px" />
</div>
</asp:Panel>
protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.Equals("atc"))
{
ModalPopupExtender1.Show();
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = GridView1.Rows[index];
ImageButton ImageButton1=(ImageButton)row.FindControl("ImageButton1");
// Response.Write("<script>alert('" + row.Cells[0].Text + "\n" + row.Cells[1].Text + "');</script>"); comment this
}
You didn't set OnRowCommand property of the GridView, so GridView1_RowCommand method won't be fired when you click the image button. Here's how you do it
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
Width="505px" DataSourceID="SqlDataSource1"
OnRowCommand="GridView1_RowCommand">
See here for more details.
Hi i want to make a footertemplate which can expand and collapse results like this image example in other topic: How do I add FooterTemplate to GridView with BoundFields
I want for default show 1 result, and after clicking in a icon on footertemplate show me more results like 4 or 5, i can show the code, thanks in advance.
The same work i have done on my project! I am pasting that work here. Please go through it, it might help you solving your problem
ASPX:
<asp:GridView Width="100%" border="1" ID="gwProfit" RowStyle-Wrap="true" runat="server" AutoGenerateColumns="false" AlternatingRowStyle-CssClass="alternaterow" RowStyle-VerticalAlign="Bottom" ShowFooter="True" HeaderStyle-Wrap="true" OnRowCommand="gwProfit_RowCommand" OnRowDataBound="gwProfit_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="Start Date">
<ItemTemplate>
<div class="input-append">
<asp:TextBox class="input_disabled" ID="txtStartDate" runat="server" Width="110px" Height="22px" Text='<%# Bind("StartDate","{0}") %>'>
</asp:TextBox>
<button class="btn123" ID="ImgStartDate" runat="server" type="button" style="height:25px;">
<i class="icon-calendar"></i>
</button>
</div>
<ajaxToolkit:CalendarExtender ID="StartDate" runat="server" TargetControlID="txtStartDate" PopupButtonID="ImgStartDate" Format="dd-MMM-yyyy">
</ajaxToolkit:CalendarExtender>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox class="input_disabled" ID="txtNewStartDate" runat="server" Width="110px" Height="22px">
</asp:TextBox>
<button class="btn123" ID="ImgStartDate" runat="server" type="button" style="height:25px;">
<i class="icon-calendar"></i>
</button>
</div>
<ajaxToolkit:CalendarExtender ID="StartDate" runat="server" TargetControlID="txtNewStartDate"
PopupButtonID="ImgStartDate" Format="dd-MMM-yyyy">
</ajaxToolkit:CalendarExtender>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="End Date">
<ItemTemplate>
<asp:TextBox class="input_disabled" ID="txtEndDate" runat="server" Width="110px" Height="22px" Text='<%# Bind("EndDate","{0}") %>'>
</asp:TextBox>
<button class="btn123" ID="ImgEndDate" runat="server" type="button" style="height:25px;">
<i class="icon-calendar"></i>
</button>
<ajaxToolkit:CalendarExtender ID="EndDate" runat="server" TargetControlID="txtEndDate"
PopupButtonID="ImgEndDate" Format="dd-MMM-yyyy">
</ajaxToolkit:CalendarExtender>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox class="input_disabled" ID="txtNewEndDate" runat="server" Width="110px" Height="22px">
</asp:TextBox>
<button class="btn123" ID="ImgEndDate" runat="server" type="button" style="height:25px;">
<i class="icon-calendar"></i>
</button>
<ajaxToolkit:CalendarExtender ID="EndDate" runat="server" TargetControlID="txtNewEndDate"
PopupButtonID="ImgEndDate" Format="dd-MMM-yyyy">
</ajaxToolkit:CalendarExtender>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Profit Per Unit">
<ItemTemplate>
<asp:TextBox class="input_disabled" ID="txtProfitPerUnit" Width="100px" Height="22px" runat="server" Text='<%# Bind("ProfitPerUnit","{0}") %>'> </asp:TextBox>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox class="input_disabled" ID="txtNewProfitPerUnit" Width="100px" Height="22px" runat="server" Text="0"/>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Action" ControlStyle-Width="14px" FooterStyle-Width="14px">
<ItemTemplate>
<input type="hidden" id="txtrec_status" name="txtrec_status" runat="server"/>
<asp:ImageButton ID="btnDelete" runat="server" CommandName="Delete" ImageUrl="~/images/delete.gif" AlternateText="Delete" CommandArgument="<%# ((GridViewRow) Container).RowIndex%>" UseSubmitBehavior="False" />
</ItemTemplate>
<FooterTemplate>
<asp:ImageButton ID="btnAdd" runat="server" CommandName="Add" ImageUrl="~/images/add.png" AlternateText="Add" UseSubmitBehavior="False"/>
</FooterTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
CodeBehind:
protected void gwProfit_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (ViewState["dtStartDate"] != null)
dtStartDate = (DataTable) ViewState["dtStartDate"];
if (e.CommandName.Equals("Add"))
{
TextBox txtStartDate = (TextBox)gwProfit.FooterRow.FindControl("txtNewStartDate");
TextBox txtEndDate = (TextBox)gwProfit.FooterRow.FindControl("txtNewEndDate");
TextBox txtProfitPerUnit = (TextBox)gwProfit.FooterRow.FindControl("txtNewProfitPerUnit");
if (txtEndDate.Text == "" || txtStartDate.Text == "" || txtProfitPerUnit.Text == "")
{
ScriptManager.RegisterStartupScript(this, GetType(), "alert", "alert('Please Select Start Date, End Date And Profit Per Unit.')", true);
}
else
{
dtStartDate.Rows.Add(dtStartDate.NewRow());
dtStartDate.Rows[dtStartDate.Rows.Count - 1]["CurrencyDeatailID"] = -2;
dtStartDate.Rows[dtStartDate.Rows.Count - 1]["StartDate"] = objFunc.toDate(txtStartDate.Text);
dtStartDate.Rows[dtStartDate.Rows.Count - 1]["EndDate"] = objFunc.toDate(txtEndDate.Text);
dtStartDate.Rows[dtStartDate.Rows.Count - 1]["ProfitPerUnit"] = objFunc.toDecimal(txtProfitPerUnit.Text);
if (dtStartDate.Rows.Count >= 0&&dtStartDate.Rows[0]["CurrencyDeatailID"].ToString()=="-1")
{
dtStartDate.Rows[0].Delete();
if (dtStartDate.Rows.Count > 0 && dtStartDate.Rows[0].RowState == DataRowState.Deleted)
dtStartDate.Rows.RemoveAt(0);
}
ViewState["dtStartDate"] = dtStartDate;
Profit_LoadGrid();
}
}
else if (e.CommandName.Equals("Delete"))
{
int index = objFunc.toInt(e.CommandArgument.ToString());
GridViewRow gvr = (GridViewRow)(((ImageButton)e.CommandSource).NamingContainer);
int RemoveAt = gvr.RowIndex;
DataTable dt = new DataTable();
dt = (DataTable)ViewState["dtStartDate"];
dt.Rows.RemoveAt(RemoveAt);
dt.AcceptChanges();
ViewState["dtStartDate"] = dt;
Profit_LoadGrid();
}
}
It would be easy
Activate "AllowPaging" in your GridView.
Make Paging row invisible.
In every click of an icon increase "PageSize" for expanding or click of another icon decrease "PageSize" for collapsing.