首页 文章

将新记录添加到Telerik RadGrid

提问于
浏览
0

我有以下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事件中动态创建控件,但我没有设法为此找到实际的代码 .

我该如何解决这个问题?

1 回答

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

相关问题