2011-09-01 3 views
1

내가없는 시간의 지난 몇에 대한 다음과 같은 문제에 대한 해결 방법을 찾기 위해 노력하지만 봤는데 어떤 성공. 인터넷에서 가능한 많은 솔루션을 발견했지만 그 중 아무 것도 내 문제에 대한 해결책이 아닙니다. 나는 Telerik 공식 포럼에 같은 질문을 올렸지 만, 나는 그들로부터 아무런 반응도 없을 것이라고 거의 확신하고있다. 나는 빈 데이터 소스에 데이터를 삽입 할 때 문제 : 'Telerik.Web.UI.GridInsertionObject'는 이름의 속성을 포함하지 않는 'XXX'

문제

가 발생합니다. RadComboBoxes에 대한 대안을 찾을 수 있었지만 Textbox에는 사용할 수 없었습니다. 표시되는 오류는 다음과 같습니다 "데이터 바인딩 : '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 이벤트를 추가하는 것입니다. GridDropDownColumn에 연결된 객체의 필드가 널 (NULL)이 아닌 경우

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

나는 RadGrids의 내부 GridDropDownColumn들과 같은 문제가 발생했습니다. DefaultInsertValue 속성은 나를위한 열쇠였습니다. DataField에 정수가있는 드롭 다운의 경우 0으로 설정합니다.

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

데이터 유형이 광산처럼 Null을 허용하지 않습니다 경우

, 나는 그것을 채워집니다 또는 가능성이 제출에 오류가 발생합니다 확인하기 위해 열에서 ColumnValidationSettings 태그를 사용하여 유효성 검사를 추가합니다.

관련 문제