RadGrid下拉列表

时间:2013-09-18 15:18:14

标签: c# drop-down-menu telerik radgrid

如何将代码中的“DurationType”列设置为下拉菜单?

我已修改代码以显示如何创建模板并添加下拉列表。但我无法弄清楚如何获取下拉列表的值,并且只能显示在插入/编辑模板中,而不是常规网格中。

protected void Page_Load(object sender, EventArgs e)
{
    if (Session["GridData"] == null)
    {
        DataTable table = GetTable();
        Session.Add("GridData", table);
    }
    DefineGridStructure();
}

public class MyTemplate : ITemplate
{
    protected DropDownList dl;
    private string colname;

    public MyTemplate(string cName)
    {
        colname = cName;
    }

    public void InstantiateIn(System.Web.UI.Control container)
    {
        dl = new DropDownList();
        dl.ID = colname;
        dl.Items.Add(new ListItem("Hours", "Hours"));
        dl.Items.Add(new ListItem("Days", "Days"));
        dl.Items.Add(new ListItem("Weeks", "Weeks"));
        dl.Items.Add(new ListItem("Months", "Months"));
        container.Controls.Add(dl);
    }

    void boolValue_DataBinding(object sender, EventArgs e)
    {
        DropDownList cBox = (DropDownList)sender;
        GridDataItem container = (GridDataItem)cBox.NamingContainer;
    }
}

private void DefineGridStructure()
{
    RadGrid grid = new RadGrid();
    grid.ID = "RadGrid1";
    grid.NeedDataSource += new GridNeedDataSourceEventHandler(grid_NeedDataSource);
    grid.AutoGenerateEditColumn = true;
    grid.AutoGenerateDeleteColumn = true;
    grid.AllowAutomaticInserts = false;
    grid.Width = Unit.Percentage(100);
    grid.PageSize = 15;
    grid.AllowPaging = true;
    grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric;
    grid.AutoGenerateColumns = false;
    grid.MasterTableView.Width = Unit.Percentage(100);
    grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.TopAndBottom;
    grid.AllowAutomaticDeletes = false;
    grid.AllowAutomaticUpdates = false;
    grid.InsertCommand +=grid_InsertCommand;
    grid.MasterTableView.DataKeyNames = new string[] { "RowNumber" };
    GridBoundColumn boundColumn = new GridBoundColumn();
    boundColumn.DataField = "RowNumber";
    boundColumn.HeaderText = "RowNumber";
    boundColumn.ReadOnly = true;
    grid.MasterTableView.Columns.Add(boundColumn);
    boundColumn = new GridBoundColumn();
    boundColumn.DataField = "Size";
    boundColumn.HeaderText = "Size";
    grid.MasterTableView.Columns.Add(boundColumn);
    boundColumn = new GridBoundColumn();
    boundColumn.DataField = "Description";
    boundColumn.HeaderText = "Description";
    grid.MasterTableView.Columns.Add(boundColumn);
    boundColumn = new GridBoundColumn();
    boundColumn.DataField = "Quantity";
    boundColumn.HeaderText = "Quantity";
    grid.MasterTableView.Columns.Add(boundColumn);
    boundColumn = new GridBoundColumn();
    boundColumn.DataField = "Duration";
    boundColumn.HeaderText = "Duration";
    grid.MasterTableView.Columns.Add(boundColumn);
    boundColumn = new GridBoundColumn();
    // Added code snippet to create the dropdown list
    GridTemplateColumn objGridTemplateColumn = new GridTemplateColumn();
    objGridTemplateColumn.HeaderText = "DurationType";
    objGridTemplateColumn.UniqueName = "DurationType";
    objGridTemplateColumn.ItemTemplate = new MyTemplate("DurationType");
    grid.MasterTableView.Columns.Add(objGridTemplateColumn);
    boundColumn = new GridBoundColumn();
    boundColumn.DataField = "Amount";
    boundColumn.HeaderText = "Amount";
    grid.MasterTableView.Columns.Add(boundColumn);
    PlaceHolder1.Controls.Add(grid);
}

private void grid_InsertCommand(object sender, GridCommandEventArgs e)
{
    // Looking to loop through the form so i can insert the values into the datatable
}

void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e)
{
    DataTable current = (DataTable)Session["GridData"];
    RadGrid grid = (RadGrid)sender;
    grid.DataSource = current;
}

static DataTable GetTable()
{
    //
    // Here we create a DataTable with a few columns.
    //
    // Create Datatable to store all colums
    DataTable dt = new DataTable();
    DataRow dr = null;
    dt.Columns.Add(new DataColumn("RowNumber", typeof(string)));
    dt.Columns.Add(new DataColumn("Size", typeof(string)));
    dt.Columns.Add(new DataColumn("Description", typeof(string)));
    dt.Columns.Add(new DataColumn("Quantity", typeof(string)));
    dt.Columns.Add(new DataColumn("Unit", typeof(string)));
    dt.Columns.Add(new DataColumn("Duration", typeof(string)));
    dt.Columns.Add(new DataColumn("DurationType", typeof(string)));
    dt.Columns.Add(new DataColumn("Amount", typeof(string)));
    dr = dt.NewRow();
    dr["RowNumber"] = 1;
    dr["Size"] = string.Empty;
    dr["Description"] = string.Empty;
    dr["Quantity"] = string.Empty;
    dr["Unit"] = string.Empty;
    dr["Duration"] = string.Empty;
    dr["DurationType"] = string.Empty;
    dr["Amount"] = string.Empty;
    dt.Rows.Add(dr);
    return dt;
}

1 个答案:

答案 0 :(得分:0)

在现有代码中,我编辑了几行来用telerik if( Input.deviceOrientation == DeviceOrientation.LandscapeLeft || Input.deviceOrientation == DeviceOrientation.LandscapeRight ) { Social.localUser.Authenticate(OnAuth); } 替换下拉列表。基本上我正在做的是,当网格处于编辑模式时,我从网格事件中获取文本的现有绑定,然后将所有新数据集绑定到RadCombobox,最后将所选字段设置为我参加了活动。

RadComboBox
用于在编辑模式下显示ItemTemplate的

protected void Page_Load(object sender, EventArgs e) { if (Session["GridData"] == null) { DataTable table = GetTable(); Session.Add("GridData", table); } DefineGridStructure(); } public class MyTemplate : ITemplate { protected RadComboBox dl; private string colname; public MyTemplate(string cName) { colname = cName; } public void InstantiateIn(System.Web.UI.Control container) { dl = new RadComboBox(); dl.ID = colname; dl.DataSource=getDurationTypes(); dl.DataTextField = "DurationTypeName"; dl.DataValueField = "DurationTypeID"; dl.DataBind(); container.Controls.Add(dl); } void boolValue_DataBinding(object sender, EventArgs e) { RadComboBox cBox = (RadComboBox)sender; GridDataItem container = (GridDataItem)cBox.NamingContainer; } } private void DefineGridStructure() { RadGrid grid = new RadGrid(); grid.ID = "RadGrid1"; grid.NeedDataSource += new GridNeedDataSourceEventHandler(grid_NeedDataSource); grid.ItemDataBound +=new GridItemEventHandler(); grid.AutoGenerateEditColumn = true; grid.AutoGenerateDeleteColumn = true; grid.AllowAutomaticInserts = false; grid.Width = Unit.Percentage(100); grid.PageSize = 15; grid.AllowPaging = true; grid.PagerStyle.Mode = GridPagerMode.NextPrevAndNumeric; grid.AutoGenerateColumns = false; grid.MasterTableView.Width = Unit.Percentage(100); grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.TopAndBottom; grid.AllowAutomaticDeletes = false; grid.AllowAutomaticUpdates = false; grid.InsertCommand +=grid_InsertCommand; grid.MasterTableView.DataKeyNames = new string[] { "RowNumber" }; GridBoundColumn boundColumn = new GridBoundColumn(); boundColumn.DataField = "RowNumber"; boundColumn.HeaderText = "RowNumber"; boundColumn.ReadOnly = true; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Size"; boundColumn.HeaderText = "Size"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Description"; boundColumn.HeaderText = "Description"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Quantity"; boundColumn.HeaderText = "Quantity"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Duration"; boundColumn.HeaderText = "Duration"; grid.MasterTableView.Columns.Add(boundColumn); boundColumn = new GridBoundColumn(); // Added code snippet to create the dropdown list GridTemplateColumn objGridTemplateColumn = new GridTemplateColumn(); objGridTemplateColumn.HeaderText = "DurationType"; objGridTemplateColumn.UniqueName = "DurationType"; objGridTemplateColumn.ItemTemplate = new MyTemplate("DurationType"); grid.MasterTableView.Columns.Add(objGridTemplateColumn); boundColumn = new GridBoundColumn(); boundColumn.DataField = "Amount"; boundColumn.HeaderText = "Amount"; grid.MasterTableView.Columns.Add(boundColumn); PlaceHolder1.Controls.Add(grid); } private void grid_InsertCommand(object sender, GridCommandEventArgs e) { // Looking to loop through the form so i can insert the values into the datatable } void grid_NeedDataSource(object sender, GridNeedDataSourceEventArgs e) { DataTable current = (DataTable)Session["GridData"]; RadGrid grid = (RadGrid)sender; grid.DataSource = current; } static DataTable GetTable() { // // Here we create a DataTable with a few columns. // // Create Datatable to store all colums DataTable dt = new DataTable(); DataRow dr = null; dt.Columns.Add(new DataColumn("RowNumber", typeof(string))); dt.Columns.Add(new DataColumn("Size", typeof(string))); dt.Columns.Add(new DataColumn("Description", typeof(string))); dt.Columns.Add(new DataColumn("Quantity", typeof(string))); dt.Columns.Add(new DataColumn("Unit", typeof(string))); dt.Columns.Add(new DataColumn("Duration", typeof(string))); dt.Columns.Add(new DataColumn("DurationType", typeof(string))); dt.Columns.Add(new DataColumn("Amount", typeof(string))); dr = dt.NewRow(); dr["RowNumber"] = 1; dr["Size"] = string.Empty; dr["Description"] = string.Empty; dr["Quantity"] = string.Empty; dr["Unit"] = string.Empty; dr["Duration"] = string.Empty; dr["DurationType"] = string.Empty; dr["Amount"] = string.Empty; dt.Rows.Add(dr); return dt; } 事件,当网格处于编辑模式时,将显示RadcomboBox。

ItemDataBound

此方法将返回用于将其与radcombobox(下拉列表)绑定的数据

  protected void Grid_ItemDataBound(object sender, GridItemEventArgs e)  
    {
    string DurationName;
    if (e.Item is GridDataItem)
    {
        GridDataItem myGridItem = (GridDataItem)e.Item;
        //Changing the DurationName field to Combobox in EDITMODE
        if (myGridItem.IsInEditMode)
        {
            GridEditableItem edititem = e.Item as GridEditableItem;
            int userId = Convert.ToInt16(edititem.GetDataKeyValue("RowNumber"));
            RadComboBoxItem selectedItem = new RadComboBoxItem(); 
            RadComboBox combo = (RadComboBox)myGridItem["DurationType"].FindControl("colname");
            DurationName= DataBinder.Eval(myGridItem.DataItem, "DurationType").ToString();
            combo.DataSource = roles.GetRoles();
            combo.DataTextField = "DurationType";
            combo.DataValueField = "DurationID";
            combo.DataBind();
            selectedItem = combo.FindItemByText(DurationName);
            combo.SelectedIndex = selectedItem.Index;
        }
      }
    }