简体   繁体   中英

asp.net Gridview checkbox - false value

I have read several other questions similar to this, and it looks to be a databinding issue. My issue somehow differs as I do not bind the data on page load. The data is bound when a selection is made from another table on the same page.

For example, my page has 3 tables (one with no value initially):

Sessions - Each session has a session date and a list of attendees

PlayersList - Contains records for all players

Attendees - Displays a list of players for a SELECTED session, from the Sessions table

Each time I select a session, and then check the Attendees checkbox, the value is always 'False'.

Thanks in advance

Here's my code.

Matches.aspx.cs

public partial class Matches : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }


    protected void GridSessionsList_SelectedIndexChanged(object sender, EventArgs e)
    {

    }

    protected void GridAttendees_SelectedIndexChanged(object sender, EventArgs e)
    {
             // this will remove an attendee from the list   
    }

    protected void ButtonUpdatePaid_Click1(object sender, EventArgs e)
    {
        Session editSession = new Session();    

        foreach (GridViewRow row in GridAttendees.Rows)
        {
            editSession.Date = Convert.ToDateTime(GridSessionsList.SelectedValue);
            int PlayerID = Convert.ToInt32(row.Cells[1].Text);
            bool Paid = Convert.ToBoolean(row.FindControl("Chk") as TextBox);
            editSession.UpdateAttendeeList(PlayerID, Paid);                                  
        }                      
    }

    protected void GridPlayersList_SelectedIndexChanged(object sender, EventArgs e)
    {
        try
        {
            Session editSession = new Session();
            editSession.Date = Convert.ToDateTime(GridSessionsList.SelectedValue);
            int PlayerID = Convert.ToInt32(GridPlayersList.SelectedRow.Cells[1].Text);
            editSession.UpdateAttendeeList(PlayerID);
            GridAttendees.DataBind();
            LabelError.Text = "Player has been added to the game on .";
        }
        catch
        {
            LabelError.Text = "Something went wrong.. Ensure you have a game selected.";
        }  
    }

    public void Chk_OnCheckedChanged(object sender, EventArgs e) 
    {

    }

And here's the Attendees GridView extract from the aspx page:

<asp:GridView ID="GridAttendees" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource2" CssClass="Table" DataKeyNames="PlayerID" OnSelectedIndexChanged="GridAttendees_SelectedIndexChanged">
    <Columns>
        <asp:CommandField ShowSelectButton="True" SelectText="Select"/>
        <asp:BoundField DataField="PlayerID" HeaderStyle-CssClass = "hideGridColumn" ItemStyle-CssClass="hideGridColumn" HeaderText="PlayerID" SortExpression="PlayerID" InsertVisible="False" ReadOnly="True" >

       <asp:TemplateField>
                <ItemTemplate>                      
                    <asp:CheckBox ID="Chk" runat="server" OnCheckedChanged="Chk_OnCheckedChanged" AutoPostBack="True"  Checked='<%# Bind("Paid") %>' />
                </ItemTemplate>                    
            </asp:TemplateField> 

    </Columns>
               <HeaderStyle CssClass="TableHeader" />
               <SelectedRowStyle BackColor="Silver" />
</asp:GridView> 

I think you are casting your CheckBox as a TextBox ?

Here:

bool Paid = Convert.ToBoolean(row.FindControl("Chk") as TextBox);

Try this:

CheckBox cb = (CheckBox)row.FindControl("Chk");
bool Paid = cb.Checked;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM