将新记录添加到Telerik RadGrid

时间:2014-04-03 10:06:19

标签: c# asp.net telerik telerik-grid radgrid

我有以下Telerik RadGrid,我在C#中使用它:

<MasterTableView Width="100%" EditMode= "InPlace" ClientDataKeyNames="menuID" CommandItemDisplay= "Top">
    <Columns>
        <telerik:GridBoundColumn DataField="Name" HeaderText="Name" SortExpression="Name" UniqueName="Name"></telerik:GridBoundColumn>
        <telerik:GridTemplateColumn UniqueName="Type" HeaderText="Type">
            <ItemTemplate>
                <asp:TextBox ID="Type" Text='<%# DataBinder.Eval(Container.DataItem, "Type") %>' runat="server"></asp:TextBox>
            </ItemTemplate>
            <EditItemTemplate>
            </EditItemTemplate>
        </telerik:GridTemplateColumn>
        <telerik:GridTemplateColumn UniqueName="List" HeaderText="List">
            <ItemTemplate>
                <asp:CheckBox ID="List" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "List") %>' />
            </ItemTemplate>
            <EditItemTemplate>
            </EditItemTemplate>
        </telerik:GridTemplateColumn>
        <telerik:GridTemplateColumn UniqueName="loadAtStart" HeaderText="loadAtStart">
            <ItemTemplate>
                <asp:CheckBox ID="loadAtStart" runat="server" Checked='<%# DataBinder.Eval(Container.DataItem, "loadAtStart") %>' />
            </ItemTemplate>
            <EditItemTemplate>
            </EditItemTemplate>
        </telerik:GridTemplateColumn>
    </Columns>
</MasterTableView>

网格填充数据,并在编辑数据时正常工作。

但是,当我单击Telerik提供的“添加新记录”按钮时,会添加一个空行,而不会在添加的新行中编辑列中的任何TextBox或CheckBox。这只是一个空行。我假设我必须在被调用的ItemDataBound事件中动态创建控件,但我没有找到实际的代码。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

请尝试使用以下代码段。

<强> ASPX

<telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false" OnNeedDataSource="RadGrid1_NeedDataSource"
    AllowFilteringByColumn="true" AllowPaging="true" OnItemCommand="RadGrid1_ItemCommand">
    <PagerStyle AlwaysVisible="true" />
    <MasterTableView DataKeyNames="UniqueID" CommandItemDisplay="Top">
        <Columns>
            <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
            </telerik:GridBoundColumn>
            <telerik:GridTemplateColumn>
                <ItemTemplate>
                    <asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Name") %>'></asp:TextBox>
                </ItemTemplate>
            </telerik:GridTemplateColumn>
        </Columns>
    </MasterTableView>
</telerik:RadGrid>
<asp:Button ID="Button1" runat="server" Text="Save All" OnClick="Button1_Click" />

<强> ASPX.CS

public partial class aaaa : System.Web.UI.Page
{

    public List<Employee> lstEmployee
    {
        get
        {
            if (Session["lstEmployee"] != null)
            {
                return (List<Employee>)Session["lstEmployee"];
            }
            else
            {
                return new List<Employee>();
            }
        }
        set
        {
            Session["lstEmployee"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            List<Employee> list = new List<Employee>();

            Employee obj = new Employee();
            obj.ID = 1;
            obj.Name = "Name1";
            obj.UniqueID = Guid.NewGuid();
            list.Add(obj);

            obj = new Employee();
            obj.ID = 2;
            obj.Name = "Name2";
            obj.UniqueID = Guid.NewGuid();
            list.Add(obj);

            lstEmployee = list;
        }
    }

    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        RadGrid1.DataSource = lstEmployee;
    }

    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
    {
        if (e.CommandName == RadGrid.InitInsertCommandName)
        {
            saveAllData();
            lstEmployee.Insert(0, new Employee() { UniqueID = Guid.NewGuid() });
            e.Canceled = true;
            RadGrid1.Rebind();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        saveAllData();
    }

    protected void saveAllData()
    {
        //Update Session
        foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
        {
            Guid UniqueID = new Guid(item.GetDataKeyValue("UniqueID").ToString());
            Employee emp = lstEmployee.Where(i => i.UniqueID == UniqueID).First();
            emp.Name = (item.FindControl("TextBox1") as TextBox).Text;
        }
    }

}

public class Employee
{
    public Guid UniqueID { get; set; }
    public int ID { get; set; }
    public string Name { get; set; }
    public bool IsActive { get; set; }
    public int weeknumber { get; set; }
}

答案 1 :(得分:0)

    I have modified the parameters according to my requirement and also included all CURD operations. 

ASPX页面

  <telerik:RadGrid ID="RadGrid1" runat="server" AutoGenerateColumns="false"
                OnNeedDataSource="RadGrid1_NeedDataSource"
                AllowFilteringByColumn="true" AllowPaging="true" OnItemCommand="RadGrid1_ItemCommand">
                <PagerStyle AlwaysVisible="true" />
                <MasterTableView DataKeyNames="UniqueID" CommandItemDisplay="Top" AutoGenerateColumns="false" >
                    <Columns>
                        <telerik:GridEditCommandColumn ButtonType="FontIconButton" />
                        <telerik:GridButtonColumn CommandName="Delete" Text="Delete" ButtonType="FontIconButton" UniqueName="DeleteColumn" />
                        <telerik:GridBoundColumn DataField="ID" UniqueName="ID" HeaderText="ID">
                        </telerik:GridBoundColumn>
                        <telerik:GridTemplateColumn  DataField="Sku" UniqueName="Sku" HeaderText="Sku">
                            <ItemTemplate>
                                <asp:Label ID="TxtSku" runat="server" Text='<%# Eval("Sku") %>'></asp:Label>
                            </ItemTemplate>
                            <EditItemTemplate>
                                <asp:TextBox ID="TxtSku" runat="server" Text='<%# Eval("Sku") %>'></asp:TextBox>
                            </EditItemTemplate>
                            <InsertItemTemplate>
                                <asp:TextBox ID="TxtSku" runat="server" Text='<%# Eval("Sku") %>'></asp:TextBox>
                            </InsertItemTemplate>
                        </telerik:GridTemplateColumn>                           
                    </Columns>                        
                </MasterTableView>
            </telerik:RadGrid>
            <asp:Button ID="Button1" runat="server" Text="Save All" OnClick="Button1_Click" />
           <telerik:RadAjaxManager runat="server">
            <AjaxSettings>
                <telerik:AjaxSetting AjaxControlID="RadGrid1">
                    <UpdatedControls>
                        <telerik:AjaxUpdatedControl ControlID="RadGrid1" />
                        <telerik:AjaxUpdatedControl ControlID="Button1" />
                    </UpdatedControls>
                </telerik:AjaxSetting>
            </AjaxSettings>
        </telerik:RadAjaxManager>
            <telerik:RadAjaxLoadingPanel ID="RadAjaxLoadingPanel1" runat="server">
            </telerik:RadAjaxLoadingPanel>

CS代码

    public List<ItemDetail> ItemDetail
    {
        get
        {
            if (Session["ItemDetail"] != null)
            {
                return (List<ItemDetail>)Session["ItemDetail"];
            }
            else
            {
                return new List<ItemDetail>();
            }
        }
        set
        {
            Session["ItemDetail"] = value;
        }
    }

    protected void RadGrid1_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        RadGrid1.DataSource = ItemDetail;
    }

    protected void RadGrid1_ItemCommand(object sender, GridCommandEventArgs e)
    {
        if (e.CommandName == RadGrid.InitInsertCommandName)
        {

        }
        if (e.CommandName == RadGrid.PerformInsertCommandName)
        {
            var item = (GridEditFormItem)e.Item;
            var txtReferenceNumber = (TextBox)item.FindControl(id: "TxtSku");
            var val = txtReferenceNumber.Text;
            ItemDetail.Insert(0, new ItemDetail() { UniqueID = Guid.NewGuid(), Sku = val, ID = Convert.ToInt32(22) });
            item.Edit = false;
            RadGrid1.Rebind();
        }
        if (e.CommandName == RadGrid.UpdateCommandName)
        {
            var item = (GridEditFormItem)e.Item;
            var txtReferenceNumber = (TextBox)item.FindControl(id: "TxtSku");
            string requestId = item.GetDataKeyValue(keyName: "UniqueID").ToString().Trim();
            Guid RequestIndentifier = Guid.Parse(requestId);
            var val = txtReferenceNumber.Text;
            var itemFind = ItemDetail.Where(x => x.UniqueID == RequestIndentifier);
            itemFind.FirstOrDefault().Sku = val;
            item.Edit = false;
            RadGrid1.Rebind();
        }
        if (e.CommandName == RadGrid.DeleteCommandName)
        {
            var item = (GridDataItem)e.Item;
            string requestId = item.GetDataKeyValue(keyName: "UniqueID").ToString().Trim();
            Guid RequestIndentifier = Guid.Parse(requestId);
            ItemDetail.RemoveAll(x => x.UniqueID == RequestIndentifier);
            RadGrid1.Rebind();
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        SaveAllData();
    }

    private void SaveAllData()
    {
        //Update Session
        foreach (GridDataItem item in RadGrid1.MasterTableView.Items)
        {
            Guid UniqueID = new Guid(item.GetDataKeyValue("UniqueID").ToString());
            ItemDetail emp = ItemDetail.Where(i => i.UniqueID == UniqueID).First();
            emp.Sku = (item.FindControl("TxtSku") as TextBox).Text;
        }
    }


}
public class ItemDetail
{
    public Guid UniqueID { get; set; }
    public int ID { get; set; }
    public string Sku { get; set; }      
}


 if (!Page.IsPostBack)
            {                    
                List<ItemDetail> list = new List<ItemDetail>();

                ItemDetail obj = new ItemDetail
                {
                    ID = 1,
                    Sku = "Name1",
                    UniqueID = Guid.NewGuid()
                };
                list.Add(obj);

                obj = new ItemDetail();
                obj.ID = 2;
                obj.Sku = "Name2";
                obj.UniqueID = Guid.NewGuid();
                list.Add(obj);

                ItemDetail = list;
            }
Hope this would help you :-)