2012-06-26 2 views
3

Я боролся с столбцом CheckBox в GridView в ASP.NET/C#. Когда закончите, эта страница должна отображать текущие открытые позиции для моего офиса. Люди должны иметь возможность проверять столько позиций, на которые они хотели бы подать заявку, а затем перейти к следующему экрану (где начинается фактическое приложение).Почему мои учетные записи не зарегистрированы?

Это обычная программа, которую я запускаю при нажатии кнопки «Применить сейчас». Я нашел этот код здесь, пробовав около дюжины других комбинаций, предложенных моим боссом и людьми здесь. Когда я запускаю его, isChecked = false, поэтому он не запускает ничего в этом операторе if. Мне что-то не хватает?

for (int i = GridView1.Rows.Count - 1; i > -1; i--) 
{ 
    GridViewRow row = GridView1.Rows[i]; 
    bool isChecked = ((CheckBox)row.FindControl("cbx_apply")).Checked; 

    if (isChecked) 
    { 
     try 
     { 
      Response.Write("Hello world"); 
      PositionsAppliedFor.Add(Convert.ToInt32((GridView1.Rows[i].Cells[1].Text))); 
      Session["SelectedPositionIDList"] = PositionsAppliedFor; 
     } 
     catch (Exception error) 
     { 
      Response.Write(error.Message); 
     } 
    } 
} 

EDIT: Кроме того, я понимаю вещи я делаю в заявлении, если это не что-то важное .. Я просто пытаюсь заставить его сделать что-то//.

ASP.NET:

<asp:GridView ID="GridView1" runat="server" 
       onselectedindexchanged="UpdateSelectedPostions"> 
    <Columns> 
     <asp:TemplateField> 
      <ItemTemplate> 
       <asp:CheckBox ID="cbx_apply" runat="server" 
           OnCheckedChanged="UpdateSelectedPostions" 
           AutoPostBack="false"/> 
      </ItemTemplate> 
     </asp:TemplateField> 
    </Columns> 
</asp:GridView> 

Простой и, вероятно, не хватает много. Я/очень/новичок в ASP.NET.

Это где я загрузить данные сетки и связать его:

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()"; 
command = new SqlCommand(sqlstatement, connection); 
ds = new DataSet(); 
adapter = new SqlDataAdapter(command); 
builder = new SqlCommandBuilder(adapter); 
adapter.Fill(ds); 
GridView1.DataSource = ds.Tables[0]; 
GridView1.DataBind(); 
connection.Close(); 

Надеюсь, этого достаточно, потому что это на самом деле все у меня есть. Я еще не добавил ничего на страницу - просто пытаюсь сделать эти глупые флажки согласен со мной.

+0

Вам также нужно добавить код aspx. – Liam

+0

Нам понадобится дополнительная информация. Где выполняется этот код? Я предполагаю, что это внутри обработчика, но обработчик для какого события? – lsuarez

+0

Привет Элли, вы привязываете это gridview к событию загрузки страницы? – theedam

ответ

8

Убедитесь, что ваш обязательный код в блоке, как это:

if (!Page.IsPostBack) 
{ 

} 

В противном случае вы будете воссоздавать флажков на каждом постбэка и, следовательно, теряет тот факт, что они проверили.

+0

РАБОТАЕТ ИДЕАЛЬНО! Спасибо огромное! –

+0

Ты очень рад :) – geekchic

5

Если код

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()"; 
command = new SqlCommand(sqlstatement, connection); 
ds = new DataSet(); 
adapter = new SqlDataAdapter(command); 
builder = new SqlCommandBuilder(adapter); 
adapter.Fill(ds); 
GridView1.DataSource = ds.Tables[0]; 
GridView1.DataBind(); 
connection.Close(); 

ли в методе page_load это будет называться каждый раз, когда вы размещаете назад, вы должны прочитать this, который даст вам лучше понять об этом.

Чтобы избежать этого, работает этот код каждый раз, когда вы обернуть обратной передачи код с этим

if(!Page.IsPostBack) 
{ 

} 

Также на стороне записки, вы звоните в UpdateSelectedPostions на обоих CheckChanged и SelectedIndexChanged вы смысл сделать это?

+0

Спасибо! Я принимал только гайчику за тебя, потому что она ответила сначала. –

+0

Не беспокойтесь =) удачи с остальной частью проекта – theedam

+0

Что делает UpdateSelectedPostions, так это то, что код C#, который вы отправили – theedam