editing gridview when paging

M

Mike P

I am trying to edit a gridview while using paging, but whenever I try to
edit a row on a page other than page 1, I get an error. Here is my
gridview and my code :

<asp:GridView ID="GridView1" runat="server"
DataSourceID="SqlDataSource1"
DataKeyNames="UserKey" AllowSorting="True"
HeaderStyle-Height="24px"
AutoGenerateColumns="false" SkinID="Grey3"
EditRowStyle-CssClass="dgedit"
AllowPaging="true"
PagerSettings-Mode="NumericFirstLast" PagerStyle-CssClass="pager"
PageSize="10" PagerStyle-ForeColor="Blue"
OnRowDataBound="GridView1_RowDataBound"
OnRowCommand="GridView1_RowCommand">
<Columns>
<asp:TemplateField HeaderText="Key"
SortExpression="UserKey">
<ItemTemplate>
<asp:Label ID="lblUserKey" Text='<%#
Eval("UserKey") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle Height="24px" Width="50px" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Team
Type" SortExpression="TeamType">
<ItemTemplate>
<asp:Label ID="lblTeamType"
Text='<%# Eval("TeamType") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle Height="24px" Width="120px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="Business
Unit" SortExpression="BusinessUnit">
<ItemTemplate>
<asp:Label ID="lblBusinessUnit"
Text='<%# Eval("BusinessUnit") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
id="ddlBusinessUnit" DataSourceID="SqlDataSource6" Runat="Server"
DataTextField="BusinessUnit"
DataValueField="BusinessUnit" SelectedValue='<%# Bind("BusinessUnit")
%>'/>
</EditItemTemplate>
<ItemStyle Height="24px" Width="170px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="Team
Manager" SortExpression="TeamManager">
<ItemTemplate>
<asp:Label ID="lblTeamManager"
Text='<%# Eval("TeamManager") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="ddlTeamManager"
DataSourceID="SqlDataSource3" Runat="Server"
DataTextField="TeamManager"
DataValueField="TeamKey" SelectedValue='<%# Bind("TeamKey") %>'/>
</EditItemTemplate>
<ItemStyle Height="24px" Width="160px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="Territory
Code" SortExpression="TerritoryCode">
<ItemTemplate>
<asp:Label ID="lblTerritoryCode"
Text='<%# Eval("TerritoryCode") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList
id="ddlTerritoryCode" DataSourceID="SqlDataSource4" Runat="Server"
DataTextField="TerritoryCode"
DataValueField="TerritoryCode" SelectedValue='<%# Bind("TerritoryCode")
%>'/>
</EditItemTemplate>
<ItemStyle Height="24px" Width="150px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="User
Name" SortExpression="UserName">
<ItemTemplate>
<asp:Label ID="lblUserName"
Text='<%# Eval("UserName") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtUserName"
Text='<%# Bind("UserName") %>' runat="server"
MaxLength="20"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator1" runat="server"
ControlToValidate="txtUserName"
Display="None" ErrorMessage="Please enter a User Name" />
</EditItemTemplate>
<ItemStyle Height="24px" Width="140px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="User
Login" SortExpression="UserLogin">
<ItemTemplate>
<asp:Label ID="lblUserLogin"
Text='<%# Eval("UserLogin") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtUserLogin"
Text='<%# Bind("UserLogin") %>' runat="server"
MaxLength="20"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator2" runat="server"
ControlToValidate="txtUserLogin"
Display="None" ErrorMessage="Please enter a User Login" />
<asp:RegularExpressionValidator
ID="RegularExpressionValidator2" runat="server"
ControlToValidate="txtUserLogin"
Display="None" ErrorMessage="Please enter a valid User Login"
ValidationExpression="[^ ]*" />
</EditItemTemplate>
<ItemStyle Height="24px" Width="140px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="Password"
SortExpression="Password">
<ItemTemplate>
<asp:Label ID="lblPassword"
Text='<%# Eval("Password") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtPassword"
Text='<%# Bind("Password") %>' runat="server"
MaxLength="15"></asp:TextBox>
<asp:RequiredFieldValidator
ID="RequiredFieldValidator3" runat="server"
ControlToValidate="txtPassword"
Display="None" ErrorMessage="Please enter a Password" />
<asp:CustomValidator
ID="CustomValidator2" runat="server" ControlToValidate="txtPassword"
Display="None"
ErrorMessage="Password must be 8-15 characters long, including at least
1 upper case character, 1 lower case character and 1 numeric digit"
OnServerValidate="ValidatePassword"
/>
</EditItemTemplate>
<ItemStyle Height="24px" Width="80px" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Email"
SortExpression="Email">
<ItemTemplate>
<asp:Label ID="lblEmail" Text='<%#
Eval("Email") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEmail" Text='<%#
Bind("Email") %>' runat="server"></asp:TextBox>
<asp:CustomValidator
ID="CustomValidator1" runat="server" ControlToValidate="txtEmail"
Display="None" ErrorMessage="Please
enter a valid Email Address"
OnServerValidate="ValidateEmail" />
</EditItemTemplate>
<ItemStyle Height="24px" Width="70px" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Region"
SortExpression="Region">
<ItemTemplate>
<asp:Label ID="lblRegion" Text='<%#
Eval("Region") %>' runat="server"></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:DropDownList id="ddlRegion"
DataSourceID="SqlDataSource5" Runat="Server"
DataTextField="Region"
DataValueField="Region" SelectedValue='<%# Bind("Region") %>'/>
</EditItemTemplate>
<ItemStyle Height="24px" Width="70px" />
</asp:TemplateField>

<asp:TemplateField HeaderText="Last
Login" SortExpression="LastLogin">
<ItemTemplate>
<asp:Label ID="lblLastLogin"
Text='<%# Eval("LastLogin") %>' runat="server"></asp:Label>
</ItemTemplate>
<ItemStyle Height="24px" Width="140px"
/>
</asp:TemplateField>

<asp:TemplateField HeaderText="Active"
SortExpression="Active">
<ItemTemplate>
<asp:CheckBox ID="chkActive"
Checked='<%# Eval("Active") %>' runat="server" Enabled="false" />
</ItemTemplate>
<ItemStyle Height="24px" Width="50px" />
</asp:TemplateField>

<asp:CommandField ShowEditButton="True"
ButtonType="Link" ShowCancelButton="True"
UpdateText="Update" EditText="Edit"
CancelText="Cancel" />

<asp:ButtonField ButtonType="Link"
CommandName="ActivateDeactivate" Text="ActivateDeactivate" />

</Columns>
</asp:GridView>


protected void GridView1_RowDataBound(object sender,
GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
LinkButton EditButton =
(LinkButton)e.Row.Cells[12].Controls[0];
EditButton.ForeColor = System.Drawing.Color.Blue;

LinkButton ActivateDeactivateButton =
(LinkButton)e.Row.Cells[13].Controls[0];
ActivateDeactivateButton.ForeColor =
System.Drawing.Color.Blue;

string strActive =
Convert.ToString(DataBinder.Eval(e.Row.DataItem, "Active"));

CheckBox chkActive =
(CheckBox)e.Row.FindControl("chkActive");

if (strActive == "True")
{
chkActive.Checked = true;
ActivateDeactivateButton.Text = "Deactivate";
}
else
{
chkActive.Checked = false;
ActivateDeactivateButton.Text = "Activate";
}
}
}

protected void GridView1_RowCommand(object sender,
GridViewCommandEventArgs e)
{
if (e.CommandName == "ActivateDeactivate")
{
// 1)Convert the row index stored in the CommandArgument
property to an Integer
int index = Convert.ToInt32(e.CommandArgument);

// Retrieve the row that contains the button clicked by the
user from the Rows collection
GridViewRow row = GridView1.Rows[index];

//get datakeys
int id = (int)GridView1.DataKeys[row.DataItemIndex].Value;

//2)get current status of checkbox and switch
bool blnActivate = false;

CheckBox cb = new CheckBox();

cb =
(CheckBox)GridView1.Rows[index].FindControl("chkActive");

if (cb.Checked.ToString() == "True")
{
blnActivate = true;
}
else
{
blnActivate = false;
}

//3)update status
DataAccess da = new DataAccess();

//not doing anything with DBResult here
DBResult dbrUpdateStatus =
(Xerox.DBResult)da.ActivateDeactivateUser(id, blnActivate);

GridView1.EditIndex = -1;

//refresh gridview
GridView1.DataBind();
}
}

public void GridView1_RowUpdated(Object source,
SqlDataSourceStatusEventArgs e)
{
//refresh gridview
GridView1.DataBind();
}

Any help would be really appreciated.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,060
Latest member
BuyKetozenseACV

Latest Threads

Top