2013-01-20 68 views
0

當用戶在我的網站上使用GridView進行搜索時,我希望有一個checkbox列,他們會點擊這一列,將列STATUS中的值更改爲U。我有一段時間尋找可行的代碼,所以我希望你們可以提供幫助。我是一個完整的NOOB,如果你知道答案,請說明性。GridView中的複選框更新

Checkbox按鈕的代碼 - 當前我搜索時它返回說它不能將字符串轉換爲boolean

   <asp:TemplateField HeaderText="Successful Contact?"> 
       <EditItemTemplate> 
        <asp:CheckBox ID="CheckBox1" runat="server" checked='<%#Bind("status")%>' AutoPostBack="true" /> 
       </EditItemTemplate> 
       <ItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" checked='<%#Bind("status")%>' 
        Enabled="False" /></ItemTemplate> 
      </asp:TemplateField>  

這是VB代碼

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 
    For Each GridViewRow In GridView1.Rows 

     Dim row As GridViewRow = GridView1.Rows(e.RowIndex) 
     Dim value As Boolean 
     value = DirectCast(GridView1.Rows(e.RowIndex).Cells(0).FindControl("CheckBox1"), CheckBox).Checked 
     Dim connectionString As String = ConfigurationManager.ConnectionStrings("Data Source=server;Initial Catalog=i3FCC01;Integrated Security=True;").ConnectionString 
     Dim com_sql As New SqlClient.SqlCommand 
     Dim insertSql As String 
     insertSql = "Update CallQueueFCC Set Status='U' where Id = @id" 
     Using myConnection As New SqlConnection(connectionString) 
      myConnection.Open() 
      Dim myCommand As New SqlCommand(insertSql, myConnection) 
      myCommand.Parameters.AddWithValue("@status", value) 
      myCommand.ExecuteNonQuery() 
      myConnection.Close() 
     End Using 
    Next 
    GridView1.EditIndex = -1 
    DataBind() 
End Sub 

回答

0

檢查的屬性,這個布爾值要綁定的狀態值複選框。

但是,狀態具有字符串值,因爲您將字符串綁定到布爾值,它會引發錯誤。

0

和前面提到的Kiran一樣,status有一個字符串值,所以你需要在行綁定事件中做一些消防。

標記

<asp:TemplateField HeaderText="Successful Contact?"> 
      <EditItemTemplate> 
       <asp:CheckBox ID="CheckBox1" runat="server" AutoPostBack="true" /> 
      </EditItemTemplate> 
      <ItemTemplate> 
      <asp:CheckBox ID="CheckBox1" runat="server" 
       Enabled="False" /></ItemTemplate> 
     </asp:TemplateField> 

代碼背後

Protected Sub GridView1_RowDataBound(sender As Object, e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles GridView1.RowDataBound 

    If e.Row.RowType = DataControlRowType.DataRow Then 
    'Evaluate the state of the check box, true when status =U , and false otherwise 
    Dim itemstatus As Boolean=If(DataBinder.Eval(e.Row.DataItem, "Status"), True, False) 
    Dim CheckBoxItemTemp As CheckBox=CType(e.Row.FindControl("CheckBox1"), CheckBox) 
    CheckBoxItemTemp.Checked=itemstatus 
    End if 


    If e.Row.RowState & DataControlRowState.Edit Then 
'same as above but now for edit item template 
    Dim editstatus As Boolean=If(DataBinder.Eval(e.Row.DataItem, "Status"), True, False) 
    Dim CheckBoxEditTemp As CheckBox=CType(e.Row.FindControl("CheckBox1"), CheckBox) 
    CheckBoxEditTemp.Checked=editstatus 
    End if 

End Sub 
+0

謝謝里面,但現在我和以前一樣混亂。 Visual Studio不喜歡e.RowIndex,但我也不確定該代碼如何執行任何操作,因爲我沒有看到它觸發任何sql update命令將SQL值更新爲U.將我的頭髮拉出來,但是我感謝你的幫助。 – user1993989

+0

我已經更新了我的答案。我的不好。它應該是e.Row來代替e.RowIndex。代碼實際上做了一些事情。它清除了你正在對字符串進行布爾轉換的錯誤。您仍然必須掛鉤你在網格行更新事件中的更新邏輯,你已經完成了。讓我知道如果這仍然不清楚。 –