我有一个DropDownList表格列表.在它之下有GridView.根据从下拉列表框中选择的表,我将GridView动态填充.由于表可能具有不同的列名,因此我需要动态地为GridView创建模板字段.
以下是我的绑定方法.我有两个问题:
if (!IsPostBack)因为GridView根据选择来填充DropDownList,因此每次更改选择时,列都将被复制.ItemTemplate的tField(TemplateField),但我怎么做呢?private void BindGridView()
{
DataSet ds = new DataSet();
try
{
ds = …
if (ds.Tables.Count > 0)
{
foreach (DataColumn dc in ds.Tables[0].Columns)
{
TemplateField tField = new TemplateField();
tField.HeaderText = dc.ColumnName;
GridView2.Columns.Add(tField);
}
GridView2.DataSource = ds.Tables[0];
GridView2.DataBind();
}
else
{
…
}
}
catch (Exception ex)
{
…
}
}
Run Code Online (Sandbox Code Playgroud)
R.C*_*R.C 17
应该注意以下各种步骤:
STEP我::
创建一个继承的接口.覆盖该方法的的接口.class ITemplate InstantiateIn()ITemplate
第二步:
为您定义一个构造函数class,将ListItemType对象作为其参数.
第三步::
如果Control添加到容器中的ControlCollection必须绑定到某个DataSource列,则注册该处理程序.事件发生时,从数据源检索文本并将其分配给您的控件.例如,将 事件定义为将绑定数据绑定到内部创建的控件.OnDataBinding eventhyprLnk_DataBindingItemTemplate
public class TemplateGenerator : ITemplate // Class inheriting ITemplate
{
ListItemType type;
string columnName;
public TemplateGenerator(ListItemType t, string cN)
{
type = t;
columnName= cN;
}
// Override InstantiateIn() method
void ITemplate.InstantiateIn(System.Web.UI.Control container)
{
switch (type)
{
case ListItemType.Item:
HyperLink hyprLnk = new HyperLink();
hyprLnk.Target = "_blank"; //Optional.
hyprLnk.DataBinding+=new EventHandler(hyprLnk_DataBinding);
container.Controls.Add(hyprLnk);
break;
}
}
// The DataBinding event of your controls
void hyprLnk_DataBinding(object sender, EventArgs e)
{
HyperLink hyprlnk = (HyperLink)sender;
GridViewRow container = (GridViewRow)hyprlnk.NamingContainer;
object bindValue = DataBinder.Eval(container.DataItem,columnName);
// Adding check in case Column allows null values
if (bindValue != DBNull.Value)
{
hyprlnk.Text = bindValue.ToString();
hyprlnk.NavigateUrl = "http://www.google.com";
}
}
}
Run Code Online (Sandbox Code Playgroud)
就这样.上面只是ItemTemplate动态创建GridView并向项模板添加控件的示例.
现在,下面是实际执行动态创建模板列的调用的函数.您可以在需要时调用此函数,例如从DropDownList事件处理程序中调用.
protected void GenerateGridViewColumnsDynamically()
{
// Create the TemplateField
TemplateField firstName = new TemplateField();
firstName.HeaderText = "First_Name";
firstName.ItemTemplate = new TemplateGenerator(ListItemType.Item, "FirstName");
// Showing boundField example just for more context
BoundField lastName = new BoundField();
lastName.DataField = "LastName";
lastName.HeaderText = "Last_Name";
// Add the Columns now
MyGridView.Columns.Add(firstName);
MyGridView.Columns.Add(lastName);
}
Run Code Online (Sandbox Code Playgroud)
注意:: FirstName和LastName是Columns其名称传递给constructor您的自定义的class:TemplateGenerator.
| 归档时间: |
|
| 查看次数: |
22099 次 |
| 最近记录: |