2011-10-11 111 views
3

我似乎无法获取我的详细信息视图以进入编辑模式。我正在编程绑定数据源。当项目命令是“编辑”时,我将模式更改为“编辑”并重新绑定数据源。我检查了控件数据绑定后仍然处于编辑模式,但细节视图在编辑模式下不显示。任何帮助将不胜感激。目前我的详细信息视图被简化为一个测试元素。 (这是从ASP.NET论坛跨岗位,因为我可以比较快一些帮助)DetailsView不会进入编辑模式

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; 
    } 

回答

1

我想通事实证明,我的Telerik Ajax Manager隐藏了我收到的错误。我是越来越“DetailsView控件触发的事件ModeChanging”,这是我使用下面的链接中的说明解决:forums.asp.net

0

从asp.net论坛链接一个简单的摘要,其中提到@Will:

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