日期:2014-05-18  浏览次数:20469 次

如何隐藏 DataGrid 自动生成的列中的 某一列
如何隐藏   DataGrid   自动生成的列中的   某一列

比如我有个   DataGrid   ,数据绑定方式是自动生成列,我想要隐藏其中一列,但这列的数据又是我需要的,所以不能采用不绑定的方式

还有我试过用   this.dg_InStore.Columns[0].Visible   =   false;
的方式隐藏,系统提示报错,   用自动生成的方式绑定的grid   的   Columns.count是0

------解决方案--------------------
#region 动态创建datagrid模板列

public class MyDataGridTemplate : System.Web.UI.ITemplate
{
ListItemType _litType;
object _objData;

public MyDataGridTemplate(ListItemType litType, object objData)
{
_litType = litType;
_objData = objData;
}

public void InstantiateIn(System.Web.UI.Control container)
{
Literal ltr = new Literal();
ltr.DataBinding += new EventHandler(this.OnDataBinding);

TextBox txt = new TextBox();

switch(_litType)
{
case ListItemType.Header:
ltr.Text = " <b> " + _objData.ToString() + " </b> ";
container.Controls.Add(ltr);
break;
case ListItemType.Item:
ltr.Text = _objData.ToString();

container.Controls.Add(ltr);
break;
case ListItemType.EditItem:
container.Controls.Add(txt);
break;
case ListItemType.Footer:
ltr.Text = " <i> " + _objData.ToString() + " </i> ";
container.Controls.Add(ltr);
break;
}
}


public void OnDataBinding(object sender, EventArgs e)
{
Literal l = (Literal) sender;//LiteralControl发送绑定请求
DataGridItem container = (DataGridItem) l.NamingContainer;
l.Text = ((DataRowView)container.DataItem)[l.Text].ToString();//绑定stuname字段
}


}

#endregion
------解决方案--------------------
//创建动态模板列
//------------------------------------------------+

for (int x = 0 ; x <= MasterDt.Columns.Count-1 ; x++)
{
TemplateColumn tc;

tc = new TemplateColumn();
tc.HeaderText = MasterDt.Columns[x].Caption;
if (MasterDt.Columns[x].Caption == "UpDateUserID " || MasterDt.Columns[x].Caption == "UpDateRecordID ")
{
//如果是编号列,则需要隐藏
tc.Visible=false;
}
tc.ItemTemplate = new MyDataGridTemplate(ListItemType.Item, MasterDt.Columns[x].Caption);// " <%# DataBinder.Eval(Container,\ "DataItem. " + MasterDt.Columns[x].Caption + "\ ")%> ");
dg_data.Columns.Add(tc);
}

//------------------------------------------------+