开发者

DetailsView Won't Go Into Edit Mode

开发者 https://www.devze.com 2023-04-12 19:01 出处:网络
I can\'t seem to get my details view to enter edit mode. I am programatically binding the data source. When the item command is \"edit\" I change the mode to \"edit\" and rebind the datasource. I chec

I can't seem to get my details view to enter edit mode. I am programatically binding the data source. When the item command is "edit" I change the mode to "edit" and rebind the datasource. I checked after the control databound and it's still in edit mode, but the details view is not displaying in edit mode. Any help would be greatly appreciated. Currently my details view is simplified to one element for testing. (this is a cross post from ASP.NET forums, since I could use some help relatively soon)

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>
                      开发者_StackOverflow中文版  <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; 
    }


I figured it out, it turns out my Telerik Ajax Manager was hiding the error I was getting. I was getting "The DetailsView fired event ModeChanging", which I resolved using the instructions in the following link: forums.asp.net


A simple summary from the asp.net forum link that @Will mentions:

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

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号