datagrid动态绑定数据与动态添加列??

dyss 2003-12-12 11:29:04
情况:有一个datagrid,按照条件,动态绑定3个Table中的一个(TableA,TableB,TableC)
1)动态绑定每一列
为了可以指定某列隐藏,就必须预先绑定列,那么如何绑定呢?(不是在设计界面中绑定,是在代码动态绑定)
2)动态添加列
在那个事件写代码?如何添加?
...全文
99 16 打赏 收藏 举报
写回复
16 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
niaoren 2003-12-23
把自动绑定去掉就可以了
  • 打赏
  • 举报
回复
niaoren 2003-12-16
很简单,你的顺序颠倒了!

第二步:
Dim col = New BoundColumn()
col = New BoundColumn()
col.HeaderText = "客户id"
col.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
col.HeaderStyle.Width = New Unit(100)
col.HeaderStyle.Wrap = False
col.ItemStyle.Wrap = True
col.DataField = "id"
DataGrid1.Columns.Add(col)
我这样绑定
第一步:
DataGrid1.DataSource = dt_Obligate.DefaultView
DataGrid1.DataBind()
  • 打赏
  • 举报
回复
niaoren 2003-12-16
up
  • 打赏
  • 举报
回复
dyss 2003-12-16
顺序已经更正了,但是问题还在
原来table 中有5列,用了DataGrid1.Columns.Add(col)之后,是在本来的基础上添加,并不是绑定!!
我应该怎样做阿?
  • 打赏
  • 举报
回复
NekChan 2003-12-16
按照 niaoren(菜的吐血) 的方法你就可以實現了,的確是順序給搞錯了。
  • 打赏
  • 举报
回复
houlinghouling 2003-12-15
private void SearchStat(string SearchType)
{
DataSet ds=new DataSet();
string strSQL = "";
SqlConnection sqlConn=new SqlConnection(strConn);
BoundColumn bc = new BoundColumn();
if (SearchType !="Test")
{
if (SearchType == "Chapter")
{
if (Session["ClassID"].ToString()!=""||Session["ClassID"].ToString()!=null)
{
strSQL="select top 10 * from sxzxxjg where kmbh="+Session["ClassID"].ToString()+" order by xxrs desc";
bc = new BoundColumn();
bc.HeaderText = "章的名称";
bc.DataField = "zmc";
this.dgrResult.Columns.Add(bc);

bc = new BoundColumn();
bc.HeaderText = "学习人数";
bc.DataField = "xxrs";
this.dgrResult.Columns.Add(bc);
}
}
else if (SearchType == "Item")
{
if (Session["ClassID"].ToString()!=""||Session["ClassID"].ToString()!=null)
{
strSQL="Select top 10 * From sxxxjg where kmbh="+Session["ClassID"].ToString()+"order by xxrs desc";
bc = new BoundColumn();
bc.HeaderText = "知识点的名称";
bc.DataField = "mc";
this.dgrResult.Columns.Add(bc);

bc = new BoundColumn();
bc.HeaderText = "学习人数";
bc.DataField = "xxrs";
this.dgrResult.Columns.Add(bc);
}
}
else if (SearchType == "Article")
{
strSQL="Select top 10 scmc,cs From jcxgwxqd group by scmc, cs order by cs desc";
bc = new BoundColumn();
bc.HeaderText = "文章名称";
bc.DataField = "scmc";
this.dgrResult.Columns.Add(bc);

bc = new BoundColumn();
bc.HeaderText = "浏览次数";
bc.DataField = "cs";
this.dgrResult.Columns.Add(bc);
}
}
}
}
你可以看一看,不知道对你是否有帮助!-
  • 打赏
  • 举报
回复
NekChan 2003-12-15
里面主要是重载了一个 System.Web.UI.ITemplate 的 InstantiateIn() 事件!
  • 打赏
  • 举报
回复
NekChan 2003-12-15
上面的绑定不可以动态绑定数据,下面是我以前写动态绑定权限群组时候写的一个动态绑定代码,你可以参考以下,并使用了TemplateColumn,里面动态绑定的是CheckBox,你也可以自己替换为其它的控件:
public class DataGridTemplate : System.Web.UI.ITemplate
{
ListItemType templateType;
string columnName;
string titleName;
public DataGridTemplate(ListItemType type, string colname, string title)
{
templateType = type;
columnName = colname;
titleName = title;
}

public void InstantiateIn(System.Web.UI.Control container)
{
Literal lc = new Literal();
switch(templateType)
{
case ListItemType.Header:
lc.Text = "<B>" + titleName + "</B>";
container.Controls.Add(lc);
break;
case ListItemType.Item:
CheckBox cb = new CheckBox();
cb.DataBinding += new EventHandler(TemplateControl_DataBinding);
container.Controls.Add(cb);
break;
case ListItemType.EditItem:
TextBox tb = new TextBox();
tb.Text = "";
container.Controls.Add(tb);
break;
case ListItemType.Footer:
lc.Text = columnName;
container.Controls.Add(lc);
break;
}
}

public void TemplateControl_DataBinding(object sender, System.EventArgs e)
{
CheckBox cb;
cb = (CheckBox)sender;
DataGridItem container = (DataGridItem) cb.NamingContainer;
cb.Checked = (bool)((DataRowView)container.DataItem)[columnName];
}
}
以上是定义部分,调用部分在下面Code:
for (int i=0; i<dtRoles.Rows.Count; i++) //根據群組添加欄位
{
TemplateColumn tc = new TemplateColumn();
tc.HeaderStyle.Width = Unit.Pixel(60);
tc.ItemStyle.HorizontalAlign = HorizontalAlign.Center;
tc.HeaderTemplate = new DataGridTemplate(ListItemType.Header, dtRoles.Rows[i]["FRoleName"].ToString(), dtRoles.Rows[i]["FDesc"].ToString());
tc.ItemTemplate = new DataGridTemplate(ListItemType.Item, dtRoles.Rows[i]["FRoleName"].ToString(), dtRoles.Rows[i]["FDesc"].ToString());
tc.EditItemTemplate = new DataGridTemplate(ListItemType.EditItem, dtRoles.Rows[i]["FRoleName"].ToString(), dtRoles.Rows[i]["FDesc"].ToString());
tc.FooterTemplate = new DataGridTemplate(ListItemType.Footer, dtRoles.Rows[i]["FRoleName"].ToString(), dtRoles.Rows[i]["FDesc"].ToString());

dgMenu.Columns.Add(tc);
}
希望能对你有所帮助!
  • 打赏
  • 举报
回复
dyss 2003-12-15
我这样绑定
第一步:
DataGrid1.DataSource = dt_Obligate.DefaultView
DataGrid1.DataBind()
DataGrid1.AutoGenerateColumns = False
第二步:
Dim col = New BoundColumn()
col = New BoundColumn()
col.HeaderText = "客户id"
col.HeaderStyle.HorizontalAlign = HorizontalAlign.Center
col.HeaderStyle.Width = New Unit(100)
col.HeaderStyle.Wrap = False
col.ItemStyle.Wrap = True
col.DataField = "id"
DataGrid1.Columns.Add(col)
如果将第二步的代码放在Page_Load事件的时候。col.HeaderText = "客户id"这句话不起作用。(原来dataSet中有5列,显示5列)
如果放在Page_Init事件中,显示的结果是在原来dataSet数据中,多了刚才添加的一列,就是说DataSet中本来显示5列,现在显示6列

请问你,第二步是放在那里?
  • 打赏
  • 举报
回复
acewang 2003-12-12
Add Column Dynamically to DataGrid to Display Calculation
http://www.c-sharpcorner.com/Code/2003/May/AddingDataGridColumnToCal.asp

Add Column Dynamically to DataGrid to Display Calculation
http://www.c-sharpcorner.com/Code/2003/Feb/DynamicDataGrid.asp
  • 打赏
  • 举报
回复
???2008 2003-12-12
up
  • 打赏
  • 举报
回复
dyss 2003-12-12
如何动态绑定数据阿?
  • 打赏
  • 举报
回复
shang515 2003-12-12
BoundColumn col = new BoundColumn();
col.HeaderText = "HeadText";
col.DataField = "DataField";
this.DataGrid1.Columns.Add(col);
  • 打赏
  • 举报
回复
acewang 2003-12-12
Dim myTable As DataTable = new DataTable("myTable")
Dim myColumn As DataColumn = New DataColumn
myColumn.DataType = System.Type.GetType("System.Decimal")
myColumn.AllowDBNull = False
myColumn.Caption = "Price"
myColumn.ColumnName = "Price"
myColumn.DefaultValue = 25
myTable.Columns.Add(myColumn)
Dim myRow As DataRow
Dim i As Integer
For i = 0 to 9
myRow = myTable.NewRow()
myRow("Price") = i + 1
myTable.Rows.Add(myRow)
Next i
  • 打赏
  • 举报
回复
dyss 2003-12-12
如果是这样绑定的话
<asp:BoundColumn DataField="Total" HeaderText="Total" DataFormatString="{0:c}">
</asp:BoundColumn>
我就不能随时改变绑定的字段了,应为绑定的字段,是不定的,根据条件改变
  • 打赏
  • 举报
回复
dyss 2003-12-12
有没有vb的阿?
最好有简单的例子就行了~~~
  • 打赏
  • 举报
回复
相关推荐
发帖
.NET社区
加入

6.0w+

社区成员

.NET技术交流专区
社区管理员
  • ASP.NET
  • R小R
  • 喵叔哟
帖子事件
创建了帖子
2003-12-12 11:29
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。