DropDownList的回传后,所有值/指数下跌 [英] DropDownList after postback all values/index lost
问题描述
我遇到一个GridView和一个DropDownList一个小问题。我能得到的DropDownList最初加载,但当它的AutoPostBack是它没有价值的回报。我填充在RowEditing子DropDownList的。我猜,我必须以某种方式重新绑定中的RowDataBound子,但不知道如何去做。如果我试图找到该控件的SelectedValue的我落得一无所有。
VB code
保护小组的Page_Load(BYVAL发件人为对象,BYVAL E上System.EventArgs)把手Me.Load
如果没有的IsPostBack然后
bindGridView()
万一
结束小组
菜单点击bindGridView
公用Sub bindGridView(可选BYVAL sortExp的String =,可选BYVAL sortDir的String =)
昏暗strConnString作为字符串= ConfigurationManager.ConnectionStrings(WEBConnectionString)。的ConnectionString
昏暗康恩作为的SqlConnection =新的SqlConnection(strConnString)
conn.Open()
昏暗strProgramNumber作为字符串= 5
昏暗strRecordType作为字符串=输入源
昏暗strProgramInformation作为字符串=\\\\路径\\为\\文件
昏暗的SQL作为字符串
DIM CMD作为的SqlCommand =新的SqlCommand()
cmd.Connection =康恩
如果sortExp<>随后的String.Empty
sortExp =(sortExp&放大器;&放大器; sortDir)的ToString
SQL =SELECT tblPrgTrackPrograms.ProgramNumber,与& _
tblPrgTrackPrograms.ProgramName,与& _
tblPrgTrackPrograms.ProgramStatus,与& _
tblPrgTrackProgramDocumentation.RecordType,与& _
tblPrgTrackProgramDocumentation.ProgramInformation与& _
FROM tblPrgTrackPrograms INNER JOIN tblPrgTrackProgramDocumentation ON&放大器; _
tblPrgTrackPrograms.ProgramNumber = tblPrgTrackProgramDocumentation.ProgramNumber ORDER BY&放大器; _
@sortExp
cmd.Parameters.AddWithValue(sortExp,sortExp) 其他
SQL =SELECT tblPrgTrackPrograms.ProgramNumber,与& _
tblPrgTrackPrograms.ProgramName,与& _
tblPrgTrackPrograms.ProgramStatus,与& _
tblPrgTrackProgramDocumentation.RecordType,与& _
tblPrgTrackProgramDocumentation.ProgramInformation与& _
FROM tblPrgTrackPrograms INNER JOIN tblPrgTrackProgramDocumentation ON&放大器; _
tblPrgTrackPrograms.ProgramNumber = tblPrgTrackProgramDocumentation.ProgramNumber
万一
cmd.CommandText = SQL
昏暗myDataSet作为新的数据集()
昏暗mySQLAdapter作为新的SqlDataAdapter(CMD)
mySQLAdapter.SelectCommand.Connection =康恩
mySQLAdapter.Fill(myDataSet)
conn.Close()
gvProgramDetails.DataSource = myDataSet
gvProgramDetails.DataBind()
结束小组
ProgramDetails负载
保护小组gvProgramDetails_Load(BYVAL发件人为对象,BYVAL E上System.EventArgs)把手gvProgramDetails.Load
bindGridView()
结束小组
ProgramDetails分页
保护小组gvProgramDetails_PageIndexChanging(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewPageEventArgs)处理gvProgramDetails.PageIndexChanging
gvProgramDetails.PageIndex = e.NewPageIndex
bindGridView()
结束小组
ProgramDetails排序
保护小组gvProgramDetails_Sorting(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewSortEventArgs)处理gvProgramDetails.Sorting
昏暗SortDirection作为字符串
如果会议(SortDirection)= vbNullString然后
会议(SortDirection)=DESC
其他
SortDirection =会议(SortDirection)。的ToString
如果SortDirection =ASC然后
SortDirection =DESC
elseif的SortDirection =DESC然后
SortDirection =ASC
其他
SortDirection =ASC
万一
bindGridView(e.SortEx pression,会议(SortDirection))
需要存储在视图状态中的排序信息
会议(SortDirection)= SortDirection
万一
结束小组ProgramDetails RowEditing
保护小组gvProgramDetails_RowEditing(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewEditEventArgs)处理gvProgramDetails.RowEditing
昏暗的LBL作为标签= CTYPE(gvProgramDetails.Rows(e.NewEditIndex).FindControl(lblRecordType),标签)
昏暗strValue中的String = lbl.Text
gvProgramDetails.EditIndex = e.NewEditIndex
bindGridView()
昏暗行作为GridViewRow = gvProgramDetails.Rows(e.NewEditIndex)
昏暗strConnString作为字符串= ConfigurationManager.ConnectionStrings(CSPaperWEBConnectionString)。的ConnectionString
昏暗ddlRecordType作为DropDownList的= CTYPE(row.FindControl(ddlRecordType),DropDownList的)
昏暗康恩作为的SqlConnection =新的SqlConnection(strConnString)
conn.Open()
昏暗的SQL作为字符串
DIM CMD作为的SqlCommand =新的SqlCommand()
cmd.Connection =康恩
SQL =从[tblPrgTrackValidRecordTypes]中选择记录类型
cmd.CommandText = SQL
昏暗myDataSet作为新的数据集()
昏暗mySQLAdapter作为新的SqlDataAdapter(CMD)
mySQLAdapter.SelectCommand.Connection =康恩
mySQLAdapter.Fill(myDataSet)
conn.Close()
如果ddlRecordType状态并没有任何再
ddlRecordType.DataTextField =记录类型
ddlRecordType.DataValueField =记录类型
ddlRecordType.DataSource = myDataSet
ddlRecordType.SelectedValue = strValue中
ddlRecordType.DataBind()
万一
结束小组
保护小组gvProgramDetails_RowDataBound(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewRowEventArgs)处理gvProgramDetails.RowDataBound
如果e.Row.RowType = DataControlRowType.DataRow然后
昏暗的Ctrl键控制= e.Row.FindControl(ddlRecordType)
如果CTRL状态并没有任何再
昏暗ddlRecordType作为DropDownList的= CTRL
MSGBOX(ddlRecordType.SelectedValue) 万一
万一
结束小组
ProgramDetails RowUpdating
保护小组gvProgramDetails_RowUpdating(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewUpdateEventArgs)处理gvProgramDetails.RowUpdating
昏暗ddlRecordType作为DropDownList的= gvProgramDetails.Rows(e.RowIndex).FindControl(ddlRecordType)
MSGBOX(ddlRecordType.SelectedValue)
gvProgramDetails.EditIndex = -1
bindGridView()
结束小组
ProgramDetails RowCancelingEdit
保护小组gvProgramDetails_RowCancelingEdit1(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewCancelEditEventArgs)处理gvProgramDetails.RowCancelingEdit
gvProgramDetails.EditIndex = -1
bindGridView()
结束小组
ProgramDetails RowDeleting
保护小组gvProgramDetails_RowDeleting(BYVAL发件人为对象,BYVAL E上System.Web.UI.WebControls.GridViewDeleteEventArgs)处理gvProgramDetails.RowDeleting
昏暗strConnString作为字符串= ConfigurationManager.ConnectionStrings(WEBConnectionString)。的ConnectionString
昏暗康恩作为的SqlConnection =新的SqlConnection(strConnString)
conn.Open()
昏暗strProgramNumber作为字符串= 5
昏暗strRecordType作为字符串=输入源
昏暗strProgramInformation作为字符串=\\\\路径\\为\\文件
昏暗的SQL作为字符串=从tblPrgTrackProgramDocumentation删去ProgramNumber = @ProgramNumber和记录类型= @RecordType和的ProgramInformation = @ProgramInformation
DIM CMD作为的SqlCommand =新的SqlCommand()
cmd.Connection =康恩
cmd.CommandText = SQL
cmd.Parameters.AddWithValue(ProgramNumber,strProgramNumber)
cmd.Parameters.AddWithValue(记录类型,strRecordType)
cmd.Parameters.AddWithValue(的ProgramInformation,strProgramInformation)
cmd.ExecuteNonQuery()
cmd.Dispose()
bindGridView()
结束小组
ASP前端
< AJX:的UpdatePanel ID =类AjaxPanel=服务器>
<&的ContentTemplate GT;
< ASP:GridView控件ID =gvProgramDetails=服务器的AutoGenerateColumns =FALSE
的CssClass =GridView控件的DataKeyNames =ProgramNumberAllowPaging =真每页=3AllowSorting =真>
<柱体和GT;
< ASP:的TemplateField ShowHeader =FALSE>
<&ItemTemplate中GT;
< ASP:LinkButton的ID =LinkButton1=服务器的CausesValidation =FALSE
的CommandName =删除文本=删除的OnClientClick =返回确认('您确定要删除此记录');>< / ASP:LinkButton的>
< / ItemTemplate中>
<&EditItemTemplate的GT;
< / EditItemTemplate中>
< ControlStyle的CssClass =按钮来删除/>
< / ASP:的TemplateField>
< ASP:CommandField中ControlStyle-的CssClass =按钮来保存ShowEditButton =真>
< ControlStyle的CssClass =按钮来保存/>
< / ASP:CommandField中>
< ASP:BoundField的数据字段=ProgramNumber的HeaderText =ProgramNumber
InsertVisible =FALSE只读=真SORTEX pression =ProgramNumber/>
< ASP:BoundField的数据字段=ProgramName中的HeaderText =ProgramName中只读=真
SORTEX pression =ProgramName中/>
< ASP:BoundField的数据字段=ProgramStatus的HeaderText =ProgramStatus只读=真
SORTEX pression =ProgramStatus/>
< ASP:的TemplateField的HeaderText =记录类型SORTEX pression =记录类型>
<&EditItemTemplate的GT;
< ASP:DropDownList的ID =ddlRecordType=服务器的AutoPostBack =真>
< / ASP:DropDownList的>
< / EditItemTemplate中>
<&ItemTemplate中GT;
< ASP:标签ID =lblRecordType=服务器文本='<%#绑定(记录类型)%>'>< / ASP:标签>
< / ItemTemplate中>
< / ASP:的TemplateField>
< ASP:BoundField的数据字段=的ProgramInformation的HeaderText =的ProgramInformation
SORTEX pression =的ProgramInformation/>
< /专栏>
< / ASP:GridView的>
< ASP:SqlDataSource的ID =SqlDataSource2=服务器的ConnectionString =<%$的ConnectionStrings:WEBConnectionString%>中
的SelectCommand =SELECT * FROM [tblPrgTrackValidRecordTypes]>< / ASP:SqlDataSource的>
< /&的ContentTemplate GT;
< / AJX:的UpdatePanel>
对于那些你们谁回答从工具箱中拖动控制,创建数据源,并设置绑定(记录类型),请不要。我尝试了这种方式和价值总是会回来后与任何记录类型了。所以,除非你能解决这个gridview的该版本不使用拖/放控制解决方案。我抓我的大脑来解决这一个。
更新
我下APP_ code工艺/ ddlRecordType.vb
创建 进口Microsoft.VisualBasic程序
命名空间processes.ProgramTrack.dllRecordType
公共类ddlRecordType
公用Sub ddlRecordType() 结束小组
公共职能GetRecords()作为数据集
昏暗康恩作为新的SqlConnection
DIM CMD作为新的SqlCommand
conn.ConnectionString = ConfigurationManager.ConnectionStrings(WEBConnectionString)。ConnectionString.ToString
cmd.CommandText =从[tblPrgTrackValidRecordTypes]记录类型
cmd.Connection =康恩
昏暗myDataSet作为新的数据集()
昏暗mySQLAdapter作为新的SqlDataAdapter(CMD)
mySQLAdapter.Fill(myDataSet)
返回myDataSet
结束功能
末级
最终命名空间
我的标记,然后看起来是这样的。
< ASP:DropDownList的ID =ddlRecordType的DataSourceID =odsRecordTypeDataTextField =记录类型DataValueField =记录类型=服务器的AutoPostBack =真> < / ASP:DropDownList的>
< ASP:ObjectDataSource控件ID =odsRecordType=服务器的TypeName =processes.ProgramTrack.dllRecordType.ddlRecordTypeSelectMethod =GetRecords>< / ASP:ObjectDataSource控件>
然后我得到同样的问题,因为之前对DDL不保持它在回传值。我应该开始一个新的问题或继续使用这一个?
更新来修复DDL不维护。禁用视图状态为GridView。
< ASP:GridView控件ID =gvProgramDetails=服务器的AutoGenerateColumns =FALSE的CssClass =GridView控件的DataKeyNames =ProgramNumberAllowPaging =真每页= 10的EnableViewState =假AllowSorting =真>
尝试创建的DDL一个ObjectDataSource,并使用它。的问题是,DDL具有页负载被初始化,或者在页初始化,或通过一个数据源的控制。如果你不使用的Ajax的UpdatePanel(勇往直前,把它拿出来,看你的code的工作,它应该反正),那么你就能够做到这一点是这样的。
如果你引入一个ObjectDataSource(你也可以传递参数给它),那么你应该结束了,你想要什么。
编辑:
我要在我的一个项目提供code,所以你可以看到我是如何使用它。这code不会是完美的,以您的需求,但会告诉你怎么做你想做的。
命名空间Appropriate.Namespace.Here {
公共类的MyType {
公开名单< KeyValuePair<字符串,字符串>> GetRoles(){
清单< KeyValuePair<字符串,字符串>> L =新的List< KeyValuePair<字符串,字符串>>(); l.Add(新KeyValuePair<字符串,字符串>(1级,分析师));
l.Add(新KeyValuePair<字符串,字符串>(级别2,客户服务));
l.Add(新KeyValuePair<字符串,字符串>(Level3的,客户服务经理));
l.Add(新KeyValuePair<字符串,字符串>(级别4,完全访问用户));
l.Add(新KeyValuePair<字符串,字符串>(LEVEL5,超级用户)); 返回升;
}
}
}< ASP:DropDownList的ID =cmbRoles=服务器的AutoPostBack =FALSE的DataSourceID =odsRolesDataTextField =值DataValueField =键/>
< ASP:ObjectDataSource控件ID =odsRoles=服务器的TypeName =Appropriate.Namespace.Here.MyTypeSelectMethod =GetRoles/>
请注意命名空间和类型名称如何协同工作给我的 SelectMethod
?我不是在选择参数提供一个覆盖,本书虽然你可以。你会做,在页面的后盾code,我可以给上一些有识之士为好,但我想不完全是过于复杂。
请注意,我是如何从方法返回一个列表?而我只是将其定义在该方法?你可以很容易地做一个数据库调用那里。
I'm running into a little problem with a gridview and a dropdownlist. I can get the dropdownlist to load initially, but when it autopostback's it returns with no value. I am populating the dropdownlist in the RowEditing sub. I'm guessing that I must somehow rebind in the RowDataBound sub, but don't know how to go about it. If I try to find the control's SelectedValue I end up with nothing.
VB Code
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
bindGridView()
End If
End Sub
'Menu Click
'bindGridView
Public Sub bindGridView(Optional ByVal sortExp As String = "", Optional ByVal sortDir As String = "")
Dim strConnString As String = ConfigurationManager.ConnectionStrings("WEBConnectionString").ConnectionString
Dim conn As SqlConnection = New SqlConnection(strConnString)
conn.Open()
Dim strProgramNumber As String = 5
Dim strRecordType As String = "Input Source"
Dim strProgramInformation As String = "\\path\to\file"
Dim sql As String
Dim cmd As SqlCommand = New SqlCommand()
cmd.Connection = conn
If sortExp <> String.Empty Then
sortExp = (sortExp & " " & sortDir).ToString
sql = "SELECT tblPrgTrackPrograms.ProgramNumber, " & _
"tblPrgTrackPrograms.ProgramName, " & _
"tblPrgTrackPrograms.ProgramStatus, " & _
"tblPrgTrackProgramDocumentation.RecordType, " & _
"tblPrgTrackProgramDocumentation.ProgramInformation " & _
"FROM tblPrgTrackPrograms INNER JOIN tblPrgTrackProgramDocumentation ON " & _
"tblPrgTrackPrograms.ProgramNumber = tblPrgTrackProgramDocumentation.ProgramNumber ORDER BY " & _
"@sortExp"
cmd.Parameters.AddWithValue("sortExp", sortExp)
Else
sql = "SELECT tblPrgTrackPrograms.ProgramNumber, " & _
"tblPrgTrackPrograms.ProgramName, " & _
"tblPrgTrackPrograms.ProgramStatus, " & _
"tblPrgTrackProgramDocumentation.RecordType, " & _
"tblPrgTrackProgramDocumentation.ProgramInformation " & _
"FROM tblPrgTrackPrograms INNER JOIN tblPrgTrackProgramDocumentation ON " & _
"tblPrgTrackPrograms.ProgramNumber = tblPrgTrackProgramDocumentation.ProgramNumber"
End If
cmd.CommandText = sql
Dim myDataSet As New DataSet()
Dim mySQLAdapter As New SqlDataAdapter(cmd)
mySQLAdapter.SelectCommand.Connection = conn
mySQLAdapter.Fill(myDataSet)
conn.Close()
gvProgramDetails.DataSource = myDataSet
gvProgramDetails.DataBind()
End Sub
'ProgramDetails Load
Protected Sub gvProgramDetails_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles gvProgramDetails.Load
bindGridView()
End Sub
'ProgramDetails Paging
Protected Sub gvProgramDetails_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles gvProgramDetails.PageIndexChanging
gvProgramDetails.PageIndex = e.NewPageIndex
bindGridView()
End Sub
'ProgramDetails Sorting
Protected Sub gvProgramDetails_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles gvProgramDetails.Sorting
Dim SortDirection As String
If Session("SortDirection") = vbNullString Then
Session("SortDirection") = "DESC"
Else
SortDirection = Session("SortDirection").ToString
If SortDirection = "ASC" Then
SortDirection = "DESC"
ElseIf SortDirection = "DESC" Then
SortDirection = "ASC"
Else
SortDirection = "ASC"
End If
bindGridView(e.SortExpression, Session("SortDirection"))
'Need to store sort info in view state
Session("SortDirection") = SortDirection
End If
End Sub
'ProgramDetails RowEditing
Protected Sub gvProgramDetails_RowEditing(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) Handles gvProgramDetails.RowEditing
Dim lbl As Label = CType(gvProgramDetails.Rows(e.NewEditIndex).FindControl("lblRecordType"), Label)
Dim strValue As String = lbl.Text
gvProgramDetails.EditIndex = e.NewEditIndex
bindGridView()
Dim row As GridViewRow = gvProgramDetails.Rows(e.NewEditIndex)
Dim strConnString As String = ConfigurationManager.ConnectionStrings("CSPaperWEBConnectionString").ConnectionString
Dim ddlRecordType As DropDownList = CType(row.FindControl("ddlRecordType"), DropDownList)
Dim conn As SqlConnection = New SqlConnection(strConnString)
conn.Open()
Dim sql As String
Dim cmd As SqlCommand = New SqlCommand()
cmd.Connection = conn
sql = "select RecordType from [tblPrgTrackValidRecordTypes] "
cmd.CommandText = sql
Dim myDataSet As New DataSet()
Dim mySQLAdapter As New SqlDataAdapter(cmd)
mySQLAdapter.SelectCommand.Connection = conn
mySQLAdapter.Fill(myDataSet)
conn.Close()
If ddlRecordType IsNot Nothing Then
ddlRecordType.DataTextField = "RecordType"
ddlRecordType.DataValueField = "RecordType"
ddlRecordType.DataSource = myDataSet
ddlRecordType.SelectedValue = strValue
ddlRecordType.DataBind()
End If
End Sub
Protected Sub gvProgramDetails_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles gvProgramDetails.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
Dim ctrl As Control = e.Row.FindControl("ddlRecordType")
If ctrl IsNot Nothing Then
Dim ddlRecordType As DropDownList = ctrl
MsgBox(ddlRecordType.SelectedValue)
End If
End If
End Sub
'ProgramDetails RowUpdating
Protected Sub gvProgramDetails_RowUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewUpdateEventArgs) Handles gvProgramDetails.RowUpdating
Dim ddlRecordType As DropDownList = gvProgramDetails.Rows(e.RowIndex).FindControl("ddlRecordType")
MsgBox(ddlRecordType.SelectedValue)
gvProgramDetails.EditIndex = -1
bindGridView()
End Sub
'ProgramDetails RowCancelingEdit
Protected Sub gvProgramDetails_RowCancelingEdit1(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCancelEditEventArgs) Handles gvProgramDetails.RowCancelingEdit
gvProgramDetails.EditIndex = -1
bindGridView()
End Sub
'ProgramDetails RowDeleting
Protected Sub gvProgramDetails_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles gvProgramDetails.RowDeleting
Dim strConnString As String = ConfigurationManager.ConnectionStrings("WEBConnectionString").ConnectionString
Dim conn As SqlConnection = New SqlConnection(strConnString)
conn.Open()
Dim strProgramNumber As String = 5
Dim strRecordType As String = "Input Source"
Dim strProgramInformation As String = "\\path\to\file"
Dim sql As String = "delete from tblPrgTrackProgramDocumentation where ProgramNumber = @ProgramNumber and RecordType = @RecordType and ProgramInformation = @ProgramInformation"
Dim cmd As SqlCommand = New SqlCommand()
cmd.Connection = conn
cmd.CommandText = sql
cmd.Parameters.AddWithValue("ProgramNumber", strProgramNumber)
cmd.Parameters.AddWithValue("RecordType", strRecordType)
cmd.Parameters.AddWithValue("ProgramInformation", strProgramInformation)
cmd.ExecuteNonQuery()
cmd.Dispose()
bindGridView()
End Sub
ASP front end
<ajx:UpdatePanel ID="ajaxpanel" runat="server">
<ContentTemplate>
<asp:GridView ID="gvProgramDetails" runat="server" AutoGenerateColumns="False"
CssClass="gridview" DataKeyNames="ProgramNumber" AllowPaging="True" PageSize="3" AllowSorting="True" >
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" CausesValidation="False"
CommandName="Delete" Text="Delete" OnClientClick="return confirm('Are you sure you want to delete this record');"></asp:LinkButton>
</ItemTemplate>
<EditItemTemplate>
</EditItemTemplate>
<ControlStyle CssClass="button delete" />
</asp:TemplateField>
<asp:CommandField ControlStyle-CssClass="button save" ShowEditButton="True">
<ControlStyle CssClass="button save" />
</asp:CommandField>
<asp:BoundField DataField="ProgramNumber" HeaderText="ProgramNumber"
InsertVisible="False" ReadOnly="True" SortExpression="ProgramNumber" />
<asp:BoundField DataField="ProgramName" HeaderText="ProgramName" ReadOnly="True"
SortExpression="ProgramName" />
<asp:BoundField DataField="ProgramStatus" HeaderText="ProgramStatus" ReadOnly="True"
SortExpression="ProgramStatus" />
<asp:TemplateField HeaderText="RecordType" SortExpression="RecordType">
<EditItemTemplate>
<asp:DropDownList ID="ddlRecordType" runat="server" autopostback="True">
</asp:DropDownList>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblRecordType" runat="server" Text='<%# Bind("RecordType") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="ProgramInformation" HeaderText="ProgramInformation"
SortExpression="ProgramInformation" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:WEBConnectionString %>"
SelectCommand="SELECT * FROM [tblPrgTrackValidRecordTypes]"></asp:SqlDataSource>
</ContentTemplate>
</ajx:UpdatePanel>
For those of you who answer drag the control in from the toolbox, create datasource, and set bind("RecordType") please don't. I've tried it that way and the value would always post back with whatever Recordtype was. So unless if you can solve that version of this gridview don't use drag/drop control solution. I'm scratching my brain to solve this one.
Update
I created under App_Code Process/ddlRecordType.vb
Imports Microsoft.VisualBasic
Namespace processes.ProgramTrack.dllRecordType
Public Class ddlRecordType
Public Sub ddlRecordType()
End Sub
Public Function GetRecords() As DataSet
Dim conn As New SqlConnection
Dim cmd As New SqlCommand
conn.ConnectionString = ConfigurationManager.ConnectionStrings("WEBConnectionString").ConnectionString.ToString
cmd.CommandText = "select RecordType from [tblPrgTrackValidRecordTypes] "
cmd.Connection = conn
Dim myDataSet As New DataSet()
Dim mySQLAdapter As New SqlDataAdapter(cmd)
mySQLAdapter.Fill(myDataSet)
Return myDataSet
End Function
End Class
End Namespace
My markup then looks like this.
<asp:DropDownList ID="ddlRecordType" DatasourceID="odsRecordType" DataTextField="RecordType" DataValueField="RecordType" runat="server" autopostback="True" > </asp:DropDownList>
<asp:ObjectDataSource ID="odsRecordType" runat="server" TypeName="processes.ProgramTrack.dllRecordType.ddlRecordType" SelectMethod="GetRecords"></asp:ObjectDataSource>
Then I get the same problem as before about the DDL not maintaining it's value at postback. Should I start a new Question or continue with this one?
Update to fix the DDL not maintaining. Disable Viewstate for the gridview.
<asp:GridView ID="gvProgramDetails" runat="server" AutoGenerateColumns="False" CssClass="gridview"DataKeyNames="ProgramNumber" AllowPaging="True" PageSize="10" EnableViewState="False" AllowSorting="True">
Try creating an objectDataSource for the DDL, and use that. The problem is that the DDL has to be initialized at page load, or on page init, OR via a DataSource control. If you weren't using the Ajax UpdatePanel (go ahead, take it out, watch your code work, it should anyways) then you would be able to do it like this.
If you'll introduce an ObjectDataSource (and you can pass parameters to it too) then you should end up with what you want.
Edit:
I'm going to provide code from a project of mine, so that you can see how I'm using it. This code will not be perfect to your needs, but will show you how to do what you want.
namespace Appropriate.Namespace.Here {
public class MyType {
public List<KeyValuePair<string, string>> GetRoles() {
List<KeyValuePair<string, string>> l = new List<KeyValuePair<string, string>>();
l.Add( new KeyValuePair<string, string>( "Level1", "Analyst" ) );
l.Add( new KeyValuePair<string, string>( "Level2", "Customer Service" ) );
l.Add( new KeyValuePair<string, string>( "Level3", "Customer Service Manager" ) );
l.Add( new KeyValuePair<string, string>( "Level4", "Full-Access User" ) );
l.Add( new KeyValuePair<string, string>( "Level5", "Super User" ) );
return l;
}
}
}
<asp:DropDownList ID="cmbRoles" runat="server" AutoPostBack="False" DataSourceID="odsRoles" DataTextField="Value" DataValueField="Key" />
<asp:ObjectDataSource ID="odsRoles" runat="server" TypeName="Appropriate.Namespace.Here.MyType" SelectMethod="GetRoles" />
Notice how the namespace and typename work together to give me the SelectMethod
? I'm not providing an override on the select parameters, altho you could. You would do that in the page backing code, and I could give some insight on that as well, but I'm trying to not be entirely overly complex.
Notice how I'm returning a List from the method? And I'm just defining it in that method? You could just as easily do a database call there.
这篇关于DropDownList的回传后,所有值/指数下跌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!