2013-11-22 57 views
0

我已閱讀了大約50個站點和stackoverflow問題,建議在我的代碼中執行以下操作。我在這方面經歷了許多變化,我似乎無法完成任何事情。GridView中的CheckBox失敗

我一直在看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> 

代碼隱藏:

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

相關問題