2013-11-22 2 views
0

Я прочитал около 50 сайтов и вопросов stackoverflow, которые советуют делать то, что у меня есть в моем коде ниже. Я прошел через множество вариаций, и я не могу заставить его ничего делать.CheckBox в GridView failing

Я наблюдал за SQL Profiler и ничего не отправил. У меня нет ошибок.

Все, что я хочу, это список с флажками. Я могу щелкнуть, чтобы изменить один параметр от 0 до 1. Я уверен, что это я, но я пропустил его, и я провел довольно неловкое время на этом , Спасибо за любой вклад.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
     DataSourceID="SqlDataSource1" DataKeyNames="npi" 
    onselectedindexchanged="GridView1_SelectedIndexChanged"> 
     <Columns> 
      <asp:BoundField DataField="provcode" HeaderText="provcode" 
       SortExpression="provcode" /> 
      <asp:BoundField DataField="npi" HeaderText="npi" SortExpression="npi" /> 
      <asp:BoundField DataField="firstname" HeaderText="firstname" 
       SortExpression="firstname" /> 
      <asp:BoundField DataField="lastname" HeaderText="lastname" 
       SortExpression="lastname" /> 
      <asp:TemplateField HeaderText="Submit Y/N"> 
       <ItemTemplate> 
        <asp:CheckBox ID="submitChk" runat="server" Enabled="true" AutoPostBack="True" OnCheckChanged="submit_CheckedChanged" 
         Checked='<%# Bind("submit") %>'/> 
       </ItemTemplate> 
       <ItemStyle HorizontalAlign="Center" /> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 
<br /> 

<p> 
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:DS_SSRS_ReportsConnectionString1 %>" 
     SelectCommand="SELECT [provcode], [npi], [firstname], [lastname], [submit] 
         FROM [DRPprovders] 
         ORDER BY lastname, firstname" 
     onselecting="SqlDataSource1_Selecting" 
     > 
    </asp:SqlDataSource> 
</p> 

CodeBehind:

using System; 
using System.Data; 
using System.Data.SqlClient; 
using System.Collections.Generic; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.Configuration; 

public partial class Pages_ProvSelect : System.Web.UI.Page 
{ 
protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     GridView1.DataBind(); 
    } 
} 

protected void GridView1_SelectedIndexChanged(object sender, EventArgs e) 
{ 

} 
protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e) 
{ 

} 

protected void submit_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox submitChk = (CheckBox)sender; 
    GridViewRow row = (GridViewRow)submitChk.NamingContainer; 
    //int ID = (int)GridView1.DataKeys[row.DataItemIndex].Value; 
    String npi = (String)GridView1.DataKeys[row.DataItemIndex].Value; 

} 

}

+0

Ваш код ничего не делает! подробнее ... – mehdi

+0

Почему, по вашему мнению, NamingContainer содержит ряд данных? – Bit

+0

@ N4TKD, я не мог сказать. Я просто следовал нескольким примерам, которые я нашел там, где другие делали то, что мне нужно делать. Я никогда лично не использовал NamingContainer, но это то, что другие предлагали, поэтому я дал ему шанс. –

ответ

1

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

Что-то, как это должно работать:

protected void submit_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox submitChk = (CheckBox)sender; 
    GridViewRow row = (GridViewRow)submitChk.NamingContainer; 
    String npi = (String)GridView1.DataKeys[row.DataItemIndex].Value; 

    SqlConnection conn = new SqlConnection("your connection string here"); 
    string updateQuery = "UPDATE DRPprovders SET submit = @submit WHERE npi = @npi"; 
    SqlCommand cmd = new SqlCommand(updateQuery, conn); 

    // If it's checked, pass 1, else pass 0 
    cmd.Parameters.AddWithValue("@submit", submitChk.Checked ? 1 : 0); 
    cmd.Parameters.AddWithValue("@npi", npi); 

    conn.Open(); 
    cmd.ExecuteNonQuery(); 
    conn.Close(); 
} 

Вы можете просто быть в состоянии передать логическое значение submitChk.Checked (а не преобразование в 1 и 0, как это сделал я), я не могу сейчас вспомнить (и я просто набрал это с головы, так что он непроверен).

+0

На самом деле это может быть 'submitChk.Checked? «1»: «0» «Человек, я ржавый по этому поводу. Я слишком привык использовать ORM на этом этапе. – jadarnel27

+0

После того, как я нашел свою тупую опечатку, я использовал ваше решение, и это все получилось. Именно то, что я хотел. Спасибо за ваше время. Это очень ценится. –

+0

Отлично, @R_Scott! Я рад, что смогу помочь. – jadarnel27

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