2013-09-26 45 views
1

我还是新来的ASP.net,但一直在寻找如何使用代码在编辑模式下添加项目到DetailsView的DropDownList。我遇到的一切都没有工作,但也许我错误地应用了它。在编辑模式下添加项目到DetailsView的DropDownList

DetailsView以ReadOnly模式启动。我读过我必须在DataBound事件中使用FindControl。这是迄今为止我所拥有的,但并没有增加任何价值。

ASPX页面

<asp:DetailsView ID="DetailsView1" runat="server" Height="50px" Width="315px" 
    AutoGenerateRows="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> 
    <Fields> 
     <asp:CommandField ShowEditButton="True" ControlStyle-CssClass="button" > 
      <ControlStyle CssClass="button"></ControlStyle> 
     </asp:CommandField> 
     <asp:BoundField DataField="FirstName" HeaderText="First Name" 
      SortExpression="FirstName" /> 
     <asp:BoundField DataField="LastName" HeaderText="Last Name" 
      SortExpression="LastName" /> 
     <asp:BoundField DataField="Email" HeaderText="Email" SortExpression="Email" /> 
     <asp:BoundField DataField="JobID" HeaderText="JobID" SortExpression="JobID" /> 
     <asp:BoundField DataField="SupervisorID" HeaderText="Supervisor" 
      SortExpression="SupervisorID" /> 
     <asp:TemplateField HeaderText="Hire Date" SortExpression="HireDate"> 
      <EditItemTemplate> 
       <span class="input-type-text margin-right relative"><asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("HireDate","{0:d}") %>' CssClass="datepicker"></asp:TextBox><img src="images/icons/fugue/calendar-month.png" width="16" height="16"></span> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("HireDate","{0:d}") %>'></asp:TextBox> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label1" runat="server" Text='<%# Bind("HireDate","{0:d}") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

     <asp:TemplateField HeaderText="Status" SortExpression="Status"> 
      <EditItemTemplate> 
       <asp:DropDownList ID="StatusList" runat="server" SelectedValue='<%# Bind("Status") %>'> 

       </asp:DropDownList> 
      </EditItemTemplate> 
      <InsertItemTemplate> 
       <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("Status") %>'></asp:TextBox> 
      </InsertItemTemplate> 
      <ItemTemplate> 
       <asp:Label ID="Label2" runat="server" Text='<%# Bind("Status") %>'></asp:Label> 
      </ItemTemplate> 
     </asp:TemplateField> 

    </Fields> 
</asp:DetailsView> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:dbConnectionString %>" 
    DeleteCommand="DELETE FROM [Users] WHERE [ID] = @ID" 
    InsertCommand="INSERT INTO [Users] ([ClientID], [UserName], [Password], [FirstName], [LastName], [Email], [JobID], [SupervisorID], [HireDate], [Status]) VALUES (@ClientID, @UserName, @Password, @FirstName, @LastName, @Email, @JobID, @SupervisorID, @HireDate, @Status)" 
    ProviderName="<%$ ConnectionStrings:dbConnectionString.ProviderName %>" 
    SelectCommand="SELECT [ID], [ClientID], [UserName], [Password], [FirstName], [LastName], [Email], [JobID], [SupervisorID], [HireDate], [Status] FROM [Users] WHERE [ID] = @ID" 
    UpdateCommand="UPDATE [Users] SET [ClientID] = @ClientID, [UserName] = @UserName, [Password] = @Password, [FirstName] = @FirstName, [LastName] = @LastName, [Email] = @Email, [JobID] = @JobID, [SupervisorID] = @SupervisorID, [HireDate] = @HireDate, [Status] = @Status WHERE [ID] = @ID"> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="ID" QueryStringField="curEmp" Type="Int64" /> 
    </SelectParameters> 

    <UpdateParameters> 
     <asp:Parameter Name="ClientID" Type="Int64" /> 
     <asp:Parameter Name="UserName" Type="String" /> 
     <asp:Parameter Name="Password" Type="String" /> 
     <asp:Parameter Name="FirstName" Type="String" /> 
     <asp:Parameter Name="LastName" Type="String" /> 
     <asp:Parameter Name="Email" Type="String" /> 
     <asp:Parameter Name="JobID" Type="Double" /> 
     <asp:Parameter Name="SupervisorID" Type="Double" /> 
     <asp:Parameter Name="HireDate" Type="DateTime" /> 
     <asp:Parameter Name="Status" Type="String" /> 
     <asp:Parameter Name="ID" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Aspx.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

public partial class EmployeeProfile : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 

    protected void DetailsView1_DataBound(object sender, EventArgs e) 
    { 
     if (DetailsView1.CurrentMode == DetailsViewMode.Edit) 
     { 

      DropDownList statusList = DetailsView1.FindControl("StatusList") as DropDownList; 


      statusList.Items.Add(new ListItem("Test", "Test")); 

      statusList.DataBind(); 

     } 

    } 


} 

任何人都可以指出什么,我在这里失踪?谢谢你的帮助!

回答

1

使用DetailsView控件的DataBound事件。

<asp:DetailsView ID="DetailsView1" runat="server" 
    OnDataBound="DetailsView1_DataBound" ...> 
</asp:DetailsView> 

检查此事件中的EditMode使用:

DetailsView.CurrentMode = DetailsViewMode.Edit

protected void DetailsView1_DataBound(object sender, EventArgs e) 
     { 
     if (DetailsView1.CurrentMode == DetailsViewMode.Edit) 
      { 
      DropDownList statusList = DetailsView1.FindControl("StatusList") as 
             DropDownList; 
       if (statusList != null) 
       { 
        statusList.Items.Add(new ListItem("Test", "Test")); 
        statusList.DataBind(); 
       } 
      } 
     } 

编辑:: 我们设置下拉列表的编辑模式选择的值,使用DataItem属性详细信息视图获取当前项目。 数据项通常用于直接访问当前记录的字段值。

DataRowView row = (DataRowView)DetailsView1.DataItem 
    if (row != null) 
    { 
    statusList.SelectedIndex =       
    statusList.Items.IndexOf(ddl.Items.FindByValue(row["Column_Name"].ToString()); 
    } 

OR试试这个:

DataRowView row = (DataRowView)DetailsView1.DataItem 
ListItem liItem = statusList.Items.FindByText(row["Column_Name"].ToString()); 
if (liItem != null) 
    { 
    statusList.Items.FindByText(row["Column_Name"].ToString()).Selected = true; 
    } 
+0

非常感谢这个!我错过了DetailsView的开始标记中的OnDataBind。我不得不拿掉DropDownList中的SelectedValue,因为我得到错误。我想我必须找到另一种方法来设置选定的值?这有助于在编辑模式下添加项目,但一旦我更新了选择,它似乎并没有更新我的选择。我错过了别的吗? – Cineno28

+0

编辑我的答案,在编辑模式下设置dropdownlist的选定值。此外,如果更新没有发生,你应该发布你的更新代码,任何更新/更新事件的详细信息视图等。或者你正在做什么来做更新,如果有的话,或者更好地问这个 –

+0

谢谢你的新问题谢谢很多为增加的编辑。我假设其中的“ddl”应该是Dropdownlist的名称是否正确?在这种情况下“StatusList”?如果需要,我会继续处理更新问题并发布另一个问题。再次感谢你的帮助! – Cineno28

相关问题