2011-06-23 64 views
1

在我的asp.net + VB Gridview中,我将来自数据表的多个列绑定到gridview的单个列中。Gridview - 如何获取RowUpdating的单元格值?

Sample Screen

但我不知道怎么做的RowEditing & RowUpdating时候能得到这些值。请帮忙。谢谢。

以下是VB代码:

Protected Sub GridView1_RowEditing(ByVal sender As Object, ByVal e As GridViewEditEventArgs) 
    'Set the edit index. 
    Gridview1.EditIndex = e.NewEditIndex   
    'Bind data to the GridView control. 
    BindData() 
End Sub 

Protected Sub GridView1_RowCancelingEdit(ByVal sender As Object, ByVal e As GridViewCancelEditEventArgs) 
    'Reset the edit index. 
    Gridview1.EditIndex = -1 
    'Bind data to the GridView control. 
    BindData() 
End Sub 

Protected Sub GridView1_RowUpdating(ByVal sender As Object, ByVal e As GridViewUpdateEventArgs) 
    'Retrieve the table from the session object. 
    Dim dt = CType(Session("dt"), DataTable) 

    'Update the values. 
    Dim row = Gridview1.Rows(e.RowIndex) 

    ............................. 

    'Reset the edit index. 
    Gridview1.EditIndex = -1 

    'Bind data to the GridView control. 
    BindData() 
End Sub 

以下是ASPX代码:

Private Sub CreateDataTable() 

    Dim cmd As New System.Data.SqlClient.SqlCommand 
    Dim sql As String 
    Dim reader As System.Data.SqlClient.SqlDataReader 
    Dim cmd3 As New System.Data.SqlClient.SqlCommand 
    Dim sql3 As String 
    Dim reader3 As System.Data.SqlClient.SqlDataReader 

    Using conn2 As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("XXXonnectionString").ConnectionString) 
     conn2.Open() 
     cmd.Connection = conn2 

     sql = "SET DATEFORMAT dmy;SELECT * FROM XXXX " 
     cmd.CommandText = sql 
     reader = cmd.ExecuteReader() 

     Dim TempStaffKey As Integer 
     Dim TempPostKey As Integer 
     Dim TempShiftDate As DateTime 
     Dim TempStartTime As DateTime 
     Dim TempEndTime As DateTime 
     Dim TempSL As String 
     Dim TempRosterKey As Integer 
     Dim TempVL As String 
     Dim TempML As String 
     Dim TempPH As String 
     Dim TempAPH As String 
     Dim TempTOIL As String 
     Dim TempOthers As String 
     Dim TempShiftType As Integer 
     Dim TempSubmittedBy As Integer 

     Dim dt As New DataTable() 
     dt.Columns.Add(New DataColumn("StaffName", GetType(String))) 
     dt.Columns.Add(New DataColumn("PostCode", GetType(String))) 
     dt.Columns.Add(New DataColumn("StaffKey", GetType(Int32))) 
     dt.Columns.Add(New DataColumn("PostKey", GetType(Int32))) 

     'Monday 
     dt.Columns.Add(New DataColumn("Col1_RosterKey", GetType(Int32))) 
     dt.Columns.Add(New DataColumn("Col1_ShiftDate", GetType(DateTime))) 
     dt.Columns.Add(New DataColumn("Col1_StartTime", GetType(DateTime))) 
     dt.Columns.Add(New DataColumn("Col1_EndTime", GetType(DateTime))) 
     dt.Columns.Add(New DataColumn("Col1_SL", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_VL", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_ML", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_PH", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_APH", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_TOIL", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_Others", GetType(String))) 
     dt.Columns.Add(New DataColumn("Col1_ShiftType", GetType(Int32))) 
     dt.Columns.Add(New DataColumn("Col1_SubmittedBy", GetType(Int32))) 

     Dim dr As DataRow 

     While reader.Read() '---For each row 

      g_TempStaffKey = "0" 
      TempStaffKey = reader("staff_key") 'will not null 
      g_selectstaffkey = TempStaffKey 
      g_selectpostkey = reader("post_key") 
      g_selectstaffname = RTrim(reader("name_eng")) 
      g_selectpostcode = RTrim(reader("post_code")) 

      Using conn3 As New System.Data.SqlClient.SqlConnection(ConfigurationManager.ConnectionStrings("XXXConnectionString").ConnectionString) 
       conn3.Open() 
       cmd3.Connection = conn3 
       sql3 = "SET DATEFORMAT dmy;SELECT * FROM xxx" 
       cmd3.CommandText = sql3 
       reader3 = cmd3.ExecuteReader() 
       If reader3.Read() Then 

        TempStaffKey = reader3("staff_key") 

        If Not IsDBNull(reader3("post_key")) Then 
         TempPostKey = reader3("post_key") 
        End If 

        If Not IsDBNull(reader3("roster_key")) Then 
         TempRosterKey = reader3("roster_key") 
        End If 

        If Not IsDBNull(reader3("shift_date")) Then 
         TempShiftDate = Format(reader3("shift_date"), "dd/MM/yyyy") 
        End If 

        If Not IsDBNull(reader3("start_time")) Then 
         TempStartTime = Format(reader3("start_time"), "HH:mm") 
        End If 

        If Not IsDBNull(reader3("end_time")) Then 
         TempEndTime = Format(reader3("end_time"), "HH:mm") 
        End If 

        If Not IsDBNull(reader3("SL")) Then 
         TempSL = reader3("SL") 
        Else 
         TempSL = "0" 
        End If 

        If Not IsDBNull(reader3("VL")) Then 
         TempVL = reader3("VL") 
        Else 
         TempVL = "0" 
        End If 

        If Not IsDBNull(reader3("ML")) Then 
         TempML = reader3("ML") 
        Else 
         TempML = "0" 
        End If 

        If Not IsDBNull(reader3("PH")) Then 
         TempPH = reader3("PH") 
        Else 
         TempPH = "0" 
        End If 

        If Not IsDBNull(reader3("APH")) Then 
         TempAPH = reader3("APH") 
        Else 
         TempAPH = "0" 
        End If 

        If Not IsDBNull(reader3("TOIL")) Then 
         TempTOIL = reader3("TOIL") 
        Else 
         TempTOIL = "0" 
        End If 

        If Not IsDBNull(reader3("Others")) Then 
         TempOthers = reader3("Others") 
        Else 
         TempOthers = "null" 
        End If 

        If Not IsDBNull(reader3("shift_type")) Then 
         TempShiftType = reader3("shift_type") 
        End If 

        If Not IsDBNull(reader3("submitted_by")) Then 
         TempSubmittedBy = reader3("submitted_by") 
        End If 

        dr = dt.NewRow() 

        dr("StaffName") = g_selectstaffname 
        dr("PostCode") = g_selectpostcode 
        dr("StaffKey") = TempStaffKey 
        dr("PostKey") = TempPostKey 

        'Col1 
        If TempShiftDate = g_header1 Then 
         dr("Col1_RosterKey") = TempRosterKey 
         dr("Col1_ShiftDate") = TempShiftDate 
         dr("Col1_StartTime") = TempStartTime 


         dr("Col1_EndTime") = TempEndTime 
         dr("Col1_SL") = TempSL 
         dr("Col1_VL") = TempVL 
         dr("Col1_ML") = TempML 
         dr("Col1_PH") = TempPH 
         dr("Col1_APH") = TempAPH 
         dr("Col1_TOIL") = TempTOIL 
         dr("Col1_Others") = TempOthers 
         dr("Col1_ShiftType") = TempShiftType 
         dr("Col1_SubmittedBy") = TempSubmittedBy 
        End If 

       End If 
................. 

       conn3.Close() 
       reader3.Close() 
      End Using 
     End While 

     Gridview1.DataSource = dt 
     Gridview1.DataBind() 

     'Persist the table in the Session object. 
     Session("dt") = dt 

     reader.Close() 

    End Using 

End Sub 



<%@ Page Title="Input" Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="sd210.aspx.vb" Inherits="sd210" ValidateRequest="false"%> 
<%@ Register Assembly="TimePicker" Namespace="MKB.TimePicker" TagPrefix="MKB" %> 

<asp:Content ID="Content1" ContentPlaceHolderID="CPH1" Runat="Server"> 
<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager>  
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:hris_shiftdutyConnectionString %>"SelectCommand="set language english; SET DATEFORMAT dmy; select * from troster"> 
</asp:SqlDataSource> 

    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:hris_shiftdutyConnectionString %>" 
    SelectCommand="set language english; select * from tshift_type"> 
</asp:SqlDataSource> 
<asp:Label ID="lb_login_name" runat="server" Visible="false" ></asp:Label> 
<asp:Label ID="lb_login_staff_key" runat="server" Visible="false" ></asp:Label> 
<asp:Label ID="lb_login_post_key" runat="server" Visible="false" ></asp:Label> 
<asp:Label ID="lb_test" runat="server" Visible="false" ></asp:Label> 

<asp:GridView ID="Gridview1" runat="server" 
AutoGenerateColumns = "false" Font-Names = "Arial" 
AutoGenerateEditButton="True" 
Font-Size = "10pt" AlternatingRowStyle-BackColor = "#C2D69B" 
AllowPaging ="true" 
PageSize = "20" Caption = "" 
onrowdatabound="GridView1_RowDataBound" 
OnRowEditing="GridView1_RowEditing" 
OnRowCancelingEdit="GridView1_RowCancelingEdit" 
OnRowUpdating="GridView1_RowUpdating" 
OnPageIndexChanging="GridView1_PageIndexChanging"> 

<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" /> 
<Columns> 
<asp:BoundField DataField = "PostCode" HeaderText = "Post" ReadOnly ="true" /> 
<asp:BoundField DataField = "StaffName" HeaderText = "Name" ReadOnly ="true" /> 

<asp:TemplateField HeaderText="Working<br>Time"> 
<ItemTemplate> 
<asp:Label ID="lb1_rosterkey" runat="server" Text='<%#DataBinder.Eval(Container.DataItem, "Col1_RosterKey")%>' Visible ="false" ></asp:Label> 
<asp:BoundField DataField = "Col1_ShiftType" /> 
<MKB:TimeSelector ID="Col1_StartTime1" runat="server" DisplaySeconds="False" ReadOnly="true" MinuteIncrement="1" AmPm="AM" BorderColor="Silver" 
          Date="" Hour="07" Minute="0" SelectedTimeFormat="Twelve"></MKB:TimeSelector> 
<MKB:TimeSelector ID="Col1_EndTime1" runat="server" DisplaySeconds="False" ReadOnly="true" MinuteIncrement="1" AmPm="PM" BorderColor="Silver" 
          Date="" Hour="07" Minute="0" SelectedTimeFormat="Twelve"></MKB:TimeSelector> 

</ItemTemplate> 
<EditItemTemplate> 
<MKB:TimeSelector ID="Col1_StartTime1" runat="server" DisplaySeconds="False" MinuteIncrement="1" AmPm="AM" BorderColor="Silver" 
          Date="" Hour="07" Minute="0" SelectedTimeFormat="Twelve"></MKB:TimeSelector> 
<MKB:TimeSelector ID="Col1_EndTime1" runat="server" DisplaySeconds="False" MinuteIncrement="1" AmPm="PM" BorderColor="Silver" 
          Date="" Hour="07" Minute="0" SelectedTimeFormat="Twelve"></MKB:TimeSelector> 
</EditItemTemplate> 

</asp:TemplateField> 

<asp:TemplateField HeaderText="Leave/TOIL"> 
<ItemTemplate> 
<asp:CheckBox 
ID="cb1_VL" Enabled="false" Text="VL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_VL")%> /> 
<asp:CheckBox 
ID="cb1_SL" Enabled="false" Text="SL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_SL")%> /> 
<asp:CheckBox 
ID="cb1_ML" Enabled="false" Text="ML" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_ML")%> /> 
<asp:CheckBox 
ID="cb1_PH" Enabled="false" Text="PH" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_PH")%> /> 
<asp:CheckBox 
ID="cb1_APH" Enabled="false" Text="APH" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_APH")%> /> 
<asp:CheckBox 
ID="cb1_TOIL" Enabled="false" Text="TOIL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_TOIL")%> /> 
<br /> 
<%#DataBinder.Eval(Container.DataItem, "Col1_Others")%> 
</ItemTemplate> 
<EditItemTemplate> 

<asp:CheckBox 
ID="cb1_VL" Text="VL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_VL")%> /> 
<asp:CheckBox 
ID="cb1_SL" Text="SL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_SL")%> /> 
<asp:CheckBox 
ID="cb1_ML" Text="ML" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_ML")%> /> 
<asp:CheckBox 
ID="cb1_PH" Text="PH" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_PH")%> /> 
<asp:CheckBox 
ID="cb1_APH" Text="APH" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_APH")%> /> 
<asp:CheckBox 
ID="cb1_TOIL" Text="TOIL" 
runat="server" 
Checked=<%#DataBinder.Eval(Container.DataItem, "Col1_TOIL")%> /> 
<asp:TextBox ID="tb1_Others" runat="server" Width="50" Text='<%#DataBinder.Eval(Container.DataItem, "Col1_Others") %>'></asp:TextBox> 
</EditItemTemplate> 
</asp:TemplateField> 

............

</Columns> 
</asp:GridView>  
</asp:Content> 

Joe

回答

3

在这些事件中,您需要说:(e 。G。找)

var txtName = e.Row.FindControl("txtName") as TextBox; 

(看ASPX标记代码,看看有什么是你的输入元素名称的名字命名txtName的文本框中 - 给它一个,如果它不具有) 然后用上面的代码读取你的网格视图事件处理程序中的元素。 (将它转换为写输入控制型 - 即文本框,复选框等)

这是合法的在大多数的网格视图事件, 此外,在列表视图中,你可以说:

var txtName = e.Item.FindControl("txtName") as TextBox; 

在一些事件中,您将行作为“e”的一部分(例如RowCreated,RowDataBound)。在其他一些(如RowUpdated)你有e.RowIndex,你可以用它说

grid.Rows[e.RowIndex].FindControl<... 

你甚至可以通过所有的行,并找到你的控制,在正在editted行

foreach (GridViewRow row in gridList.Rows) 
{ 
    if (row.RowState == DataControlRowState.Edit) 
    { 
     var txtName = row.FindControl("txtName") as TextBox; 
    } 
} 
+0

嗨,我需要把在哪个事件来获得这些价值? RowUpdating? RowCommand? 谢谢 乔 –

+0

看到我上面的新评论。 –

1

在网格中有RowIndex,并使用RowIndex查找值。

相关问题