Telerik RadGrid 的问题:"Telerik.Web.UI.GridInsertionObject"不包含名为 'XXX ' 的属性



在过去的几个小时里,我一直在试图找到解决以下问题的方法,但没有任何成功。我在网上找到了很多可能的解决方案,但没有一个能解决我的问题。我也在官方Telerik的论坛上发布了同样的问题,尽管我几乎可以肯定我不会得到他们的回应。

当我想要将数据插入空数据源时,会出现问题。我已经能够为RadComboBoxes找到解决方案,但不是为文本框。显示的错误是:"DataBinding: 'Telerik.Web.UI。GridInsertionObject'不包含名为' opcipriority '的属性。"

代码如下:

。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>

我真的希望你们能帮助我,所以任何帮助都会很感激!

尝试将以下内容添加到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 %>'    

好的,我找到了一个解决方法。您需要做的是添加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);
        }
    }

当连接到GridDropDownColumn的对象中的字段不可为空时,我一直在RadGrids内部的GridDropDownColumn s中遇到同样的问题。DefaultInsertValue属性对我来说是关键。对于DataField中带有整数的下拉菜单,我将其设置为0。

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

如果你的数据类型不像我的那样可为空,我会在列中添加使用ColumnValidationSettings标签的验证,以确保它被填充,否则你可能会在提交时得到一个错误。

确保gvTicketi_NeedDataSource处理程序将您的网格连接到List<T>而不是IEnumerable<T>。为我解决了这个问题

来源:http://dotfresh.blogspot.com/2010/01/fixing-telerikwebuigridinsertionobject.html

相关内容

最新更新