DetailsView不会进入编辑模式

时间:2011-10-11 14:45:18

标签: c# asp.net edit detailsview

我似乎无法获取我的详细信息视图以进入编辑模式。我以编程方式绑定数据源。当item命令为“edit”时,我将模式更改为“edit”并重新绑定数据源。我在控制数据绑定后检查了它仍处于编辑模式,但详细信息视图未在编辑模式下显示。任何帮助将不胜感激。目前,我的详细信息视图已简化为一个用于测试的元素(这是来自ASP.NET论坛的交叉帖子,因为我可以相对较快地使用一些帮助)

ASPX:

<div style="width:990px;height:430px;">
    <div style="width:650px;height:430px;float:left;">
    <telerik:RadAjaxLoadingPanel ID="devicesLoadingPanel" runat="server" Skin="Simple" />
    <telerik:RadGrid ID="devicesRadGrid" runat="server" Skin="Simple" AllowPaging="true" Width="550" PageSize="15"
    AutoGenerateColumns="false"  DataSourceID="SqlDataSource1" OnSelectedIndexChanged="devicesGrid_SelectedIndexChanged">
        <MasterTableView DataKeyNames="ID" CommandItemDisplay="Top">
            <Columns>
                <telerik:GridTemplateColumn HeaderText="Type" SortExpression="Type">
                    <ItemTemplate>
                        <asp:Label ID="lblType" runat="server" Text='<%# evalLabelType((Eval("UnitType"))) %>' />
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
                <telerik:GridBoundColumn HeaderText="Name" DataField="Name" SortExpression="Name"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn HeaderText="Description" DataField="Description" SortExpression="Description"></telerik:GridBoundColumn>
                <telerik:GridTemplateColumn HeaderText="Location">
                    <ItemTemplate>
                        <asp:Label ID="lblDevicesLocation" runat="server" Text='<%# evalDevicesLocation(Eval("LocationID")) %>' />  
                    </ItemTemplate>
                </telerik:GridTemplateColumn>
            </Columns>
        <CommandItemSettings ShowAddNewRecordButton="true" ShowRefreshButton="false"  />
        </MasterTableView>
        <ClientSettings EnablePostBackOnRowClick="true">
            <Selecting AllowRowSelect="true" />
        </ClientSettings>
    </telerik:RadGrid>

    </div>
    <div style="border: 1px solid #000;width:250px;height:430px;float:left;" >
        <asp:DetailsView ID="devicesDetailsView" runat="server" AutoGenerateRows="false" Width="200" Height="430" 
         CellPadding="0" GridLines="None" 
         OnItemCommand="devicesDetails_ItemCommand" OnDataBound="devicesDetails_DataBound">
            <Fields>
                <asp:TemplateField>
                    <ItemTemplate>
                        <span class="titles">Type:</span>
                        <asp:Label ID="lblType" runat="server" Text='<%# evalLabelType((Eval("UnitType"))) %>' />
                    </ItemTemplate>
                    <EditItemTemplate>
                        <span class="titles">Type:</span>
                        <asp:TextBox ID="txtType" runat="server" Text="test" />
                    </EditItemTemplate>
                </asp:TemplateField>

                <asp:CommandField ShowEditButton="true" ButtonType="Button" />
            </Fields>
        </asp:DetailsView>
    </div>

C#:

    protected void devicesGrid_SelectedIndexChanged(object sender, EventArgs e)
    {
        devicesDataKey = devicesRadGrid.SelectedItems[0].OwnerTableView.DataKeyValues[devicesRadGrid.SelectedItems[0].ItemIndex]["ID"].ToString();
        devicesDetailsView.DataSource = getDS(); 
        devicesDetailsView.DataBind();
    }

    protected void devicesDetails_ItemCommand(object sender, DetailsViewCommandEventArgs e)
    {
        if (e.CommandName == "Edit")
        {
            // Switch mode and rebind
            devicesDetailsView.ChangeMode(DetailsViewMode.Edit);
            devicesDetailsView.DataSource = getDS();
            devicesDetailsView.DataBind(); 
        }
    }



    protected void devicesDetails_DataBound(object sender, EventArgs e)
    {

        //HideShowFields(devicesDataKey);  

        // Checking the mode again
        string test22 = devicesDetailsView.CurrentMode.ToString();
    }



    protected DataTable getDS()
    {

        string ID = devicesDataKey;

        // Get that device type!
        SqlCommand getDeviceType = new SqlCommand("SELECT UnitType FROM dbo.unit WHERE ID='" + ID + "'", connection);

        connection.Open();
        devicesTypeID = getDeviceType.ExecuteScalar().ToString();
        connection.Close();
        getDeviceType.Dispose(); 

        // This for attenuation. Depending on the device type it may pull from a different table.
        if (devicesTypeID == "2" || devicesTypeID == "3" || devicesTypeID == "4")
        {
            SqlCommand cmd = new SqlCommand("SELECT UnitType,Unit.Active,Name, Description, PrinterName, PrinterPort, PrinterIP, Unit.IPAddress, Unit.ID, LockHoldTimeout,LightOnTimeout, DoorAlertTimeout, EnableEmergAccess, EnableBizHours, ReaderAttenuation, Attenuation, Unit.LocationID, ScanTime FROM dbo.Unit INNER JOIN dbo.Readers on Unit.ID = Readers.UnitID WHERE Unit.ID='" + ID + "'", connection);
            DataTable dt = new DataTable();
            connection.Open();
            using (cmd)
            {
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            connection.Close();
            // Attach the data to the details view
            return dt;
        }
        if (devicesTypeID == "5" || devicesTypeID == "6")
        {
            SqlCommand cmd = new SqlCommand("SELECT UnitType,Unit.Active,Name, Description, PrinterName, PrinterPort, PrinterIP, Unit.IPAddress, Unit.ID, LockHoldTimeout,LightOnTimeout, DoorAlertTimeout, EnableEmergAccess, EnableBizHours, ReaderAttenuation, Unit.LocationID, ScanTime, Attenuation FROM dbo.Unit, dbo.Readers WHERE Unit.ID='" + ID + "'", connection);
            DataTable dt = new DataTable();
            connection.Open();
            using (cmd)
            {
                SqlDataAdapter da = new SqlDataAdapter(cmd);
                da.Fill(dt);
            }
            connection.Close();
            // Attach the data to the details view
            return dt;
        }

        return null; 
    }

2 个答案:

答案 0 :(得分:1)

我弄清楚了,事实证明我的Telerik Ajax Manager隐藏了我得到的错误。我收到了“DetailsView触发事件ModeChanging”,我使用以下链接中的说明解决了这个问题:forums.asp.net

答案 1 :(得分:0)

来自@Will提到的asp.net论坛链接的简单摘要:

protected void dvSupplier_ModeChanging(object sender, DetailsViewModeEventArgs e)
    {
        dvSupplier.ChangeMode(e.NewMode);
        this.SetData();
    }