2011-09-01 51 views
1

我一直試圖在最近幾個小時內找到以下問題的解決方法,但沒有任何成功。我在互聯網上發現了很多可能的解決方案,但是他們都沒有解決我的問題。我也在官方Telerik的論壇上發佈了同樣的問題,儘管我幾乎可以肯定我沒有得到他們的迴應。Telerik RadGrid的問題:'Telerik.Web.UI.GridInsertionObject'不包含名稱爲'XXX'的屬性

當我想要將數據插入空數據源時,會出現問題。我已經能夠找到RadComboBoxes的解決方法,但不能用於Textboxes。顯示的錯誤是:「DataBinding:'Telerik.Web.UI.GridInsertionObject'不包含名爲'OpciPrioritet'的屬性。」

下面是代碼:

的.ascx(需要radgrid控件):

<table> 
<tr> 
    <td> 
     Nadređeni ticket: 
    </td> 
    <td colspan="3"> 
     <telerik:RadComboBox ID="rcbNadredeniTicket" AppendDataBoundItems="true" runat="server" 
      Width="455px"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Prijavio: 
    </td> 
    <td colspan="3"> 
     <telerik:RadComboBox ID="rcbPrijavio" AppendDataBoundItems="true" runat="server" 
      Width="455px"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Asset: 
    </td> 
    <td colspan="3"> 
     <telerik:RadComboBox ID="rcbAsset" AppendDataBoundItems="true" runat="server" Width="455px"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Opći prioritet: 
    </td> 
    <td> 
     <asp:TextBox ID="txtOpciPrioritet" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.OpciPrioritet") %>'></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Tip: 
    </td> 
    <td> 
     <telerik:RadComboBox ID="rcbTip" runat="server"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Status: 
    </td> 
    <td> 
     <telerik:RadComboBox ID="rcbStatus" runat="server"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Datum prijave: 
    </td> 
    <td> 
     <asp:TextBox ID="txtDatumPrijave" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.DatumPrijave") %>'></asp:TextBox> 
    </td> 
    <td> 
     Vrsta prijave: 
    </td> 
    <td> 
     <telerik:RadComboBox ID="rcbVrstaPrijave" Text='<%# DataBinder.Eval(Container, "DataItem.VrstaPrijave") %>' 
      runat="server"> 
     </telerik:RadComboBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Prioritet: 
    </td> 
    <td> 
     <telerik:RadComboBox ID="rcbPrioritet" Text='<%# DataBinder.Eval(Container, "DataItem.Prioritet") %>' 
      runat="server"> 
     </telerik:RadComboBox> 
    </td> 
    <td> 
     Deadline: 
    </td> 
    <td> 
     <asp:TextBox ID="txtDeadline" runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.DatumDo") %>'></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Opis: 
    </td> 
    <td colspan="3"> 
     <asp:TextBox ID="txtOpis" runat="server" TextMode="MultiLine" Width="455px" Height="200px" 
      Text='<%# DataBinder.Eval(Container, "DataItem.Opis") %>'></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Zatvoren ticket: 
    </td> 
    <td> 
     <asp:CheckBox ID="chkZatvoren" runat="server" Checked='<%# CheckNull(DataBinder.Eval(Container, "DataItem.Zatvoren")) %>' /> 
    </td> 
</tr> 
<tr> 
    <td> 
     Opis zatvorenog ticketa: 
    </td> 
    <td colspan="3"> 
     <asp:TextBox ID="txtOpisZatvorenog" runat="server" TextMode="MultiLine" Width="455px" 
      Height="200px" Text='<%# DataBinder.Eval(Container, "DataItem.OpisZatvoren") %>'></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     Bilješke: 
    </td> 
    <td colspan="3"> 
     <asp:TextBox ID="txtBiljeske" runat="server" TextMode="MultiLine" Width="455px" Height="200px" 
      Text='<%# DataBinder.Eval(Container, "DataItem.Biljeske") %>'></asp:TextBox> 
    </td> 
</tr> 
<tr> 
    <td> 
     <asp:Button ID="btnUpdate" Text="Spremi" runat="server" CommandName="Update" Visible='<%# !(DataItem is Telerik.Web.UI.GridInsertionObject) %>'> 
     </asp:Button> 
     <asp:Button ID="btnInsert" Text="Spremi" runat="server" CommandName="PerformInsert" 
      Visible='<%# DataItem is Telerik.Web.UI.GridInsertionObject %>'></asp:Button> 

     <asp:Button ID="btnCancel" Text="Odustani" runat="server" CausesValidation="False" 
      CommandName="Cancel"></asp:Button> 
    </td> 
</tr> 

.aspx.cs(僅所需要的代碼段):

 protected void gvTicketi_ItemDataBound(object sender, GridItemEventArgs e) 
    { 
     int idFirma = Convert.ToInt16(Request.QueryString["idt"]); 

     if ((e.Item is GridEditFormItem) && e.Item.IsInEditMode) 
     { 
      GridEditFormItem editFormItem = (GridEditFormItem)e.Item; 
      UserControl userControl = (UserControl)e.Item.FindControl(GridEditFormItem.EditFormUserControlID); 

      TSEntities db = new TSEntities(); 
      Ticket ticket = new Ticket(); 
      TicketAsset ticketAsset = new TicketAsset(); 

      RadComboBox rcbTip = (RadComboBox)userControl.FindControl("rcbTip"); 
      rcbTip.Items.Add(new RadComboBoxItem("Incident")); 
      rcbTip.Items.Add(new RadComboBoxItem("Reklamacija")); 
      rcbTip.Items.Add(new RadComboBoxItem("Nova funkcionalnost")); 
      rcbTip.DataBind(); 
      rcbTip.Text = "'<%# DataBinder.Eval(Container, 'DataItem.Tip') %>'"; 

      RadComboBox rcbStatus = (RadComboBox)userControl.FindControl("rcbStatus"); 
      rcbStatus.Items.Add(new RadComboBoxItem("New")); 
      rcbStatus.Items.Add(new RadComboBoxItem("U radu")); 
      rcbStatus.Items.Add(new RadComboBoxItem("On hold")); 
      rcbStatus.Items.Add(new RadComboBoxItem("Pending")); 
      rcbStatus.Items.Add(new RadComboBoxItem("Scheduled")); 
      rcbStatus.Items.Add(new RadComboBoxItem("Canceled")); 
      rcbStatus.Items.Add(new RadComboBoxItem("Completed")); 
      rcbStatus.DataBind(); 
      rcbStatus.Text = "'<%# DataBinder.Eval(Container, 'DataItem.Status') %>'"; 

      RadComboBox rcbVrstaPrijave = (RadComboBox)userControl.FindControl("rcbVrstaPrijave"); 
      rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Usmeno")); 
      rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Telefon")); 
      rcbVrstaPrijave.Items.Add(new RadComboBoxItem("E-mail")); 
      rcbVrstaPrijave.Items.Add(new RadComboBoxItem("Web")); 
      rcbVrstaPrijave.DataBind(); 
      rcbVrstaPrijave.Text = "'<%# DataBinder.Eval(Container, 'DataItem.VrstaPrijave') %>'"; 

      RadComboBox rcbPrioritet = (RadComboBox)userControl.FindControl("rcbPrioritet"); 
      rcbPrioritet.Items.Add(new RadComboBoxItem("Low")); 
      rcbPrioritet.Items.Add(new RadComboBoxItem("Normal")); 
      rcbPrioritet.Items.Add(new RadComboBoxItem("High")); 
      rcbPrioritet.Items.Add(new RadComboBoxItem("Odmah")); 
      rcbPrioritet.DataBind(); 
      rcbPrioritet.Text = "'<%# DataBinder.Eval(Container, 'DataItem.Prioritet') %>'"; 

      RadComboBox rcbNadredeniTicket = (RadComboBox)userControl.FindControl("rcbNadredeniTicket"); 
      var nadredenTicketList = (from t in db.Ticket 
             select t).ToList(); 

      if (nadredenTicketList.Count > 0) 
      { 
       rcbNadredeniTicket.DataSource = from t in nadredenTicketList 
               where t.idFirma == idFirma && t.Zatvoren == false 
               select new { t.idTicket, t.idNadredeniTicket, OpisTicketa = t.idTicket + " - " + t.Opis }; 

       rcbNadredeniTicket.DataTextField = "OpisTicketa"; 
       rcbNadredeniTicket.DataValueField = "idTicket"; 
       rcbNadredeniTicket.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idNadredeniTicket') %>'"; 
      } 

      rcbNadredeniTicket.Items.Add(new RadComboBoxItem("Bez nadređenog ticketa", "0")); 
      rcbNadredeniTicket.DataBind(); 

      RadComboBox rcbPrijavio = (RadComboBox)userControl.FindControl("rcbPrijavio"); 
      rcbPrijavio.DataSource = from k in db.Kontakt 
            where k.idFirma == idFirma 
            select new { k.idKontakt, kontaktNaziv = k.Ime + " " + k.Prezime }; 

      rcbPrijavio.Items.Add(new RadComboBoxItem("Bez kontakta", "0")); 
      rcbPrijavio.DataTextField = "kontaktNaziv"; 
      rcbPrijavio.DataValueField = "idKontakt"; 
      rcbPrijavio.Text = "'<%# DataBinder.Eval(Container, 'DataItem.idKontakt') %>'"; 
      rcbPrijavio.DataBind(); 

      RadComboBox rcbAsset = (RadComboBox)userControl.FindControl("rcbAsset"); 
      var assetList = (from a in db.Asset 
          where a.idFirma == idFirma 
          select a).ToList(); 

      if (assetList.Count > 0) 
      { 
       var assets = from a in assetList 
          where a.idFirma == idFirma 
          select new { a.idAsset, Naziv = a.Naziv + " (" + a.Kontakt.Ime + " " + a.Kontakt.Prezime + ")" }; 

       rcbAsset.DataSource = assets; 
       rcbAsset.DataTextField = "Naziv"; 
       rcbAsset.DataValueField = "idAsset"; 
       rcbAsset.Text = "'<%# DataBinder.Eval(Container, 'DataItem.Naziv') %>'"; 
       rcbAsset.Items.Add(new RadComboBoxItem("Bez pridruženog asseta", "0")); 
       rcbAsset.DataBind(); 
      }        


      if (!e.Item.OwnerTableView.IsItemInserted) 
      { 
       int idTicket = Convert.ToInt32(editFormItem.GetDataKeyValue("idTicket")); 
       ticket = db.Ticket.SingleOrDefault(t => t.idTicket == idTicket); 

       string tip = ticket.Tip; 
       rcbTip.Items.FindItemByText(tip).Selected = true; 

       string status = ticket.Status; 
       rcbStatus.Items.FindItemByText(status).Selected = true; 

       string vrstaPrijave = ticket.VrstaPrijave; 
       rcbVrstaPrijave.Items.FindItemByText(vrstaPrijave).Selected = true; 

       string prioritet = ticket.Prioritet; 
       rcbPrioritet.Items.FindItemByText(prioritet).Selected = true; 

       int kontakt = Convert.ToInt32(ticket.idKontakt); 

       if (ticket.idKontakt == null) 
       { 
        rcbPrijavio.Items.FindItemByValue("0").Selected = true; 
       } 
       else 
       { 
        rcbPrijavio.Items.FindItemByValue(kontakt.ToString()).Selected = true; 
       } 

       int nadredeniTicket = Convert.ToInt32(ticket.idNadredeniTicket); 

       if (ticket.idNadredeniTicket == null) 
       { 
        rcbNadredeniTicket.Items.FindItemByValue("0").Selected = true; 
       } 
       else 
       { 
        rcbNadredeniTicket.Items.FindItemByValue(nadredeniTicket.ToString()).Selected = true; 
       } 

       var ticketAssetCount = from ta in db.TicketAsset 
             where ta.idTicket == idTicket 
             select ta;     

       if (ticketAssetCount.Count() > 0) 
       { 
        ticketAsset = db.TicketAsset.SingleOrDefault(ta => ta.idTicket == idTicket); 

        int asset = Convert.ToInt32(ticketAsset.idAsset); 

        rcbAsset.Items.FindItemByValue(asset.ToString()).Selected = true; 
       } 
       else 
       { 
        rcbAsset.Items.FindItemByValue("0").Selected = true; 
       } 
      } 
      else if (e.Item.OwnerTableView.IsItemInserted) 
      { 
       var newVals = new System.Collections.Specialized.ListDictionary(); 
       newVals["OpciPrioritet"] = string.Empty; 
       e.Item.OwnerTableView.InsertItem(newVals); 
      } 
     } 
    } 

的.aspx:

<telerik:RadGrid ID="gvTicketi" runat="server" AllowPaging="True" AllowSorting="True" 
    AutoGenerateColumns="False" CellSpacing="0" GridLines="None" 
    onneeddatasource="gvTicketi_NeedDataSource" 
    onitemdatabound="gvTicketi_ItemDataBound" 
    oninsertcommand="gvTicketi_InsertCommand" 
    onupdatecommand="gvTicketi_UpdateCommand"> 
    <MasterTableView DataKeyNames="idTicket" CommandItemDisplay="TopAndBottom" InsertItemPageIndexAction="ShowItemOnCurrentPage"> 
     <CommandItemSettings AddNewRecordText="Dodaj novi ticket" RefreshText="Prikaži sve tickete" /> 
     <Columns> 
      <telerik:GridBoundColumn UniqueName="idTicket" HeaderText="Ticket" DataField="idTicket"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="idKontakt" HeaderText="Kontakt" DataField="idKontakt"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="idManager" HeaderText="Manager" DataField="idManager"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="Opis" HeaderText="Opis" DataField="Opis"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="TicketNumber" HeaderText="Broj ticketa" DataField="TicketNumber"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="DatumPrijave" HeaderText="Datum prijave" DataField="DatumPrijave" DataFormatString="{0:dd.MM.yyyy.}"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="VrstaPrijave" HeaderText="Vrsta prijave" DataField="VrstaPrijave"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="Tip" HeaderText="Tip" DataField="Tip"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="Status" HeaderText="Status" DataField="Status"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="Prioritet" HeaderText="Prioritet" DataField="Prioritet"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="OpciPrioritet" HeaderText="Opći prioritet" DataField="OpciPrioritet"> 
      </telerik:GridBoundColumn> 
      <telerik:GridBoundColumn UniqueName="Deadline" HeaderText="Deadline" DataField="DatumDo" DataFormatString="{0:dd.MM.yyyy.}"> 
      </telerik:GridBoundColumn> 
      <telerik:GridCheckBoxColumn UniqueName="Zatvoren" HeaderText="Zatvoren" DataField="Zatvoren"> 
      </telerik:GridCheckBoxColumn> 
      <telerik:GridEditCommandColumn UniqueName="EditCommandColumn"> 
      </telerik:GridEditCommandColumn> 
      <telerik:GridButtonColumn UniqueName="DeleteColumn" Text="Delete" CommandName="Delete" 
       ConfirmDialogType="RadWindow" ConfirmText="Brisanje ticketa!" /> 
     </Columns> 
     <EditFormSettings UserControlName="UserControls/TicketUserControl.ascx" EditFormType="WebUserControl"> 
      <EditColumn UniqueName="EditCommandColumn1"> 
      </EditColumn> 
     </EditFormSettings> 
    </MasterTableView> 
</telerik:RadGrid> 

我真的希望你們可以幫助我,所以任何幫助,將不勝感激!

回答

1

好的,我能找到解決方法。你必須做的是添加ItemCommand事件。

protected void gvTicketi_ItemCommand(object sender, GridCommandEventArgs e) 
    { 
     if (e.CommandName == RadGrid.InitInsertCommandName) 
     { 
      e.Canceled = true; 
      System.Collections.Specialized.ListDictionary newValues = new System.Collections.Specialized.ListDictionary(); 
      newValues["DatumPrijave"] = " "; 
      newValues["DatumDo"] = " "; 
      newValues["Opis"] = " "; 
      newValues["OpisZatvoren"] = " "; 
      newValues["Biljeske"] = " "; 
      newValues["Zatvoren"] = false; 
      newValues["Asset"] = "Bez pridruženog asseta"; 

      e.Item.OwnerTableView.InsertItem(newValues); 
     } 
    } 
+0

我從來沒有想過嘗試這個,但它做到了! –

1

嘗試添加下列到RadTextBox的數據綁定之一:

第一次嘗試:

Text='<%# Eval("DataItem.OpciPrioritet") ?? String.Empty %>' 

第二次嘗試:

Text='<%# Eval("DataItem.OpciPrioritet") != null ? Eval("DataItem.OpciPrioritet") : String.Empty %>' 

第三次嘗試:

Text='<%# Eval("DataItem.OpciPrioritet") != DBNull.Value ? Eval("DataItem.OpciPrioritet") : String.Empty %>'  
+0

謝謝你的努力,但不幸的是沒有任何變化的沒有工作。我能夠自己找出一些東西。其實,如果你的回答對我來說很好,我會很高興,因爲它更優雅,但不幸的是它沒有。 –

0

我一直有與GridDropDownColumn小號RadGrids內同樣的問題時,在連接到GridDropDownColumn對象字段不爲空。 DefaultInsertValue屬性是我的關鍵。我將其設置爲0,並在DataField的整數下拉。

<telerik:GridDropDownColumn DataField="SomeDataID" HeaderText="SomeData" 
    DataSourceID="SomeDataSource" ListValueField="ID" ListTextField="Name" 
    DefaultInsertValue="0"> 
</telerik:GridDropDownColumn> 

如果你的數據類型不能爲空像我這樣,我會使用ColumnValidationSettings標籤列,以確保它填充或者你可能會得到提交錯誤添加驗證。

相關問題