在我的asp.net + VB Gridview中,我将几个列从datatable绑定到gridview的一个列中。
但我不知道如何在进行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>
乔
答案 0 :(得分:3)
在这些事件中,您需要说:(例如,找到名为txtName的文本框)
var txtName = e.Row.FindControl("txtName") as TextBox;
(查看ASPX标记代码以查看输入元素名称的名称 - 如果没有,则给它一个) 然后使用上面的代码在网格视图事件处理程序中读取您的元素。 (将其转换为写入输入控件类型 - 即TextBox,CheckBox等)
这在大多数网格视图事件中都有效, 同样在列表视图中,您可以说:
var txtName = e.Item.FindControl("txtName") as TextBox;
在某些事件中,您将该行作为“e”的一部分(例如,RowCreated,RowDataBound)。在其他一些(比如RowUpdated)你有e.RowIndex,你可以用它来说
grid.Rows[e.RowIndex].FindControl<...
您甚至可以浏览所有行并在正在编辑的行中找到您的控件
foreach (GridViewRow row in gridList.Rows)
{
if (row.RowState == DataControlRowState.Edit)
{
var txtName = row.FindControl("txtName") as TextBox;
}
}
答案 1 :(得分:1)
在网格中使用RowIndex并使用RowIndex查找值。