2014-02-03 2 views
1

Я прочитал несколько других вопросов, подобных этому, и это похоже на проблему привязки данных. Моя проблема как-то отличается, поскольку я не привязываю данные к загрузке страницы. Данные привязаны, когда выбор сделан из другой таблицы на той же странице.asp.net Gridview checkbox - false значение

Например, моя страница имеет 3 таблицы (один без значения изначально):

Sessions - Каждая сессия имеет дату сессии и список участников

PlayersList - содержит записи для всех игроков

Участники - Отображает список игроков для выбранной сессии из таблицы сессий

Каждый раз, когда я выбираю сеанс, а затем установите флажок Присутствующие, значение всегда «False».

Заранее спасибо

Вот мой код.

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) 
    { 

    } 

А вот Присутствующие GridView извлечь из страницы ASPX:

<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> 
+0

Флажок, который всегда фальшь, в котором GridView? – Plue

+0

GridAttendees содержит флажок (извините, вырезать и вставить вопрос) – MJay

ответ

0

Я думаю, что вы бросаете ваш CheckBox как TextBox?

Здесь:

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

Попробуйте это:

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

При изменении на: bool Paid = Convert.ToBoolean (row.FindControl ("Chk") в качестве CheckBox); Я получаю сообщение об ошибке: Не удалось наложить объект типа «System.Web.UI.WebControls.CheckBox» на тип «System.IConvertible». – MJay

+0

Это работает, спасибо очень много Крис – MJay

Смежные вопросы