我的“医院状态”字段用下拉列表显示,点“编辑”进入编辑状态后,下拉列表根据数据源的查询结果选定SelectedIndex,这个过程应该写在什么事件里,又该如何写(好像没有Editing一类的事件)?<asp:DetailsView ID="DetailsView1" runat="server" Height="48px" Style="z-index: 102;
        left: 614px; position: absolute; top: 173px" Width="349px" AllowPaging="True" AutoGenerateDeleteButton="True" AutoGenerateEditButton="True" AutoGenerateInsertButton="True" AutoGenerateRows="False" DataKeyNames="Hos_ID" DataSourceID="SqlDataSource2" OnItemUpdated="DetailsView1_ItemUpdated" EnableTheming="False" BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" CellPadding="3" ForeColor="Black" GridLines="Vertical">
        <Fields>
            <asp:BoundField DataField="Hos_ID" HeaderText="医院编号" InsertVisible="False" ReadOnly="True"
                SortExpression="Hos_ID" />
            <asp:BoundField DataField="Hos_Name" HeaderText="医院名称" SortExpression="Hos_Name" />
            <asp:BoundField DataField="Hos_Type" HeaderText="医院类型" SortExpression="Hos_Type" />
            <asp:BoundField DataField="Hos_Level" HeaderText="医院级别" SortExpression="Hos_Level" />
            <asp:TemplateField HeaderText="医院状态" SortExpression="Hos_State">
                <EditItemTemplate>
                    <asp:DropDownList ID="ddlstate" runat="server" DataSource='<%# ddlstate_bind() %>' AutoPostBack="true"></asp:DropDownList>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:DropDownList ID="ddlstate" runat="server" DataSource='<%# ddlstate_bind() %>' AutoPostBack="true"></asp:DropDownList>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label2" runat="server" Text='<%# Bind("Hos_State") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="医院简介" SortExpression="Hos_Present">
                <EditItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Hos_Present") %>' TextMode="MultiLine"></asp:TextBox>
                </EditItemTemplate>
                <InsertItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("Hos_Present") %>' TextMode="MultiLine"></asp:TextBox>
                </InsertItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="Label1" runat="server" Text='<%# Bind("Hos_Present") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>
        </Fields>
        <FooterStyle BackColor="#CCCCCC" />
        <EditRowStyle BackColor="LightSteelBlue" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
        <HeaderStyle BackColor="SteelBlue" Font-Bold="True" ForeColor="White" />
        <AlternatingRowStyle BackColor="#CCCCCC" />
    </asp:DetailsView>
    <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:reserveConnectionString %>"
        SelectCommand="SELECT * FROM T_GH_Hospital WHERE Hos_ID=@Hos_ID " 
        >
        <SelectParameters>
            <asp:ControlParameter Name="Hos_ID" ControlID="GridView1" />
        </SelectParameters>
    </asp:SqlDataSource>
后台代码:public ArrayList ddlstate_bind()
    {
        ArrayList list = new ArrayList();
        list.Add("正常");
        list.Add("暂停");
        list.Add("冻结");
        return list;
    }

解决方案 »

  1.   

    gridview提供相关编辑事件 事件中有Editing事件
      

  2.   

    可以foreach循环所有的行 查找控件再写dropdownlist 事件
      

  3.   

    在 rowdatabind 事件 
      

  4.   

    我点“编辑”后进入编辑状态,DropDownList会默认选择第一个索引,此时我要重新找到对应的索引,请问这个过程我应该写在什么事件里面?
      

  5.   

    我知道了,好像应该在ModeChanging事件里面写
      

  6.   

    protected void DetailsView1_ModeChanging(object sender, DetailsViewModeEventArgs e)
        {
            if (e.NewMode.ToString() == "Edit")
            {
                DropDownList ddl = (DropDownList)((DetailsView)sender).FindControl("ddlstate1");
                switch (((Label)(((DetailsView)sender).FindControl("lblstate"))).Text.ToString())
                {
                    case "正常":
                        ddl.SelectedIndex = 0;
                        break;
                    case "暂停":
                        ddl.SelectedIndex = 1;
                        break;
                    case "冻结":
                        ddl.SelectedIndex = 2;
                        break;
                    default:
                        break;
                }
            }
        }
    写了之后,点击“编辑”报错:未将对象引用设置到对象的实例。 
    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
    行 40:             {
    行 41:                 case "正常":
    行 42:                     ddl.SelectedIndex = 0;
    行 43:                     break;
    行 44:                 case "暂停":
     源文件: e:\Project\temp\MyWebApp\MyWebApp\Sys_admin\Sys_admin_hosmgr.aspx.cs    行: 42 
      

  7.   

    不是很明白lz要干嘛
    如果你是要刷新值的 加一个change事件
      

  8.   

    我的“医院状态”字段刚开始是Label显示
    进入“编辑”状态之后,用DropDownList(已提前加入了三个状态)显示。我想让DropDownList显示它应该显示的值,但进入“编辑”状态后,DropDownList总是显示第一个索引的值。我想让DropDownList显示它应该显示的值,这个过程在哪个事件里面写?
      

  9.   

    protected void DetailsView1_PreRender(object sender, EventArgs e) 

    if (IsPostBack) 

    DetailsView detailsView = (DetailsView)sender; 
    if (detailsView.CurrentMode == DetailsViewMode.Edit) 

    DropDownList dropDownList = (DropDownList)detailsView.FindControl("DropDownList1"); 
    dropDownList.Items.Add(new ListItem("text", "value")); 


    }
    在插入(DetailsView1_ItemInserting)或更新(DetailsView1_ItemUpdating)事件中
    获取
      

  10.   

    是if (IsPostBack),还是!IsPostBack?