Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net使gridView列不可见_Asp.net_Gridview - Fatal编程技术网

asp.net使gridView列不可见

asp.net使gridView列不可见,asp.net,gridview,Asp.net,Gridview,这是一个主-明细表。Master是一个GridView。而且,细节是一个细节视图 整个过程都是通过编程实现的 从代码中可以看到,DetailsView使用主对象的ID来检索细节项 我需要使主GridView的ID列不可见。因为,这对于页面的用户来说是无关紧要的。但它不能损害页面逻辑 但是代码行,GridView1.Columns[1].Visible=false正在生成异常 Index was out of range. Must be non-negative and less than th

这是一个主-明细表。Master是一个GridView。而且,细节是一个细节视图

整个过程都是通过编程实现的

从代码中可以看到,DetailsView使用主对象的ID来检索细节项

我需要使主GridView的ID列不可见。因为,这对于页面的用户来说是无关紧要的。但它不能损害页面逻辑

但是代码行,
GridView1.Columns[1].Visible=false正在生成异常

Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index
我应该如何解决这个问题

public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                BindData();
            }
        }

        protected void BindData()
        {
            List<Order> orders = Order.Get();

            GridView1.DataSource = orders;
            GridView1.DataBind();

            // This is giving Error...............!!!
            GridView1.Columns[1].Visible = false;

            // At first, when the page first loads, 
            //      GridView1.SelectedIndex == -1
            // So, this is done to automatically select the 1st item.
            if (GridView1.SelectedIndex < 0)
            {
                GridView1.SelectedIndex = 0;
            }

            int selRowIndex = GridView1.SelectedIndex;

            int selMasterId = Convert.ToInt32(GridView1.Rows[selRowIndex].Cells[1].Text);

            Order master = Order.Get(selMasterId);

            labItemsCount.Text = master.Items.Count.ToString();

            DetailsView1.DataSource = master.Items;
            DetailsView1.DataBind();            
        }

        protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
        {
            BindData();
        }

        protected void DetailsView1_PageIndexChanging(object sender, DetailsViewPageEventArgs e)
        {
            DetailsView1.PageIndex = e.NewPageIndex;

            BindData();
        }
    }
public分部类\u默认值:System.Web.UI.Page
{
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!IsPostBack)
{
BindData();
}
}
受保护的void BindData()
{
List orders=Order.Get();
GridView1.DataSource=订单;
GridView1.DataBind();
//这是一个错误。。。。。。。。。。。。。。。!!!
GridView1.Columns[1]。Visible=false;
//首先,当页面第一次加载时,
//GridView1.SelectedIndex==-1
//因此,这样做是为了自动选择第一个项目。
如果(GridView1.SelectedIndex<0)
{
GridView1.SelectedIndex=0;
}
int selRowIndex=GridView1.SelectedIndex;
int selMasterId=Convert.ToInt32(GridView1.Rows[selRowIndex].Cells[1].Text);
Order master=Order.Get(selMasterId);
labitemscont.Text=master.Items.Count.ToString();
DetailsView1.DataSource=master.Items;
DetailsView1.DataBind();
}
受保护的void GridView1\u SelectedIndexChanged(对象发送方,事件参数e)
{
BindData();
}
受保护的void DetailsView1_PageIndexChanging(对象发送方,DetailsViewPageEventArgs e)
{
DetailsView1.PageIndex=e.NewPageIndex;
BindData();
}
}

您是否考虑过使用gridview的
DataKeyNames
属性?通过这种方式,您可以从
GridView
bu中删除'id'列,但仍可以访问页面加载中的'id'值

DataKeyNames = "id"
然后你可以像这样得到id的值

int selRowIndex = GridView1.SelectedIndex;
int selMasterId = Convert.ToInt32(GridView.DataKeys[selRowIndex].Value);
Order master = Order.Get(selMasterId);
或者,您可以尝试在
GridView
OnRowBound
事件中更改列的可见性

protected void GridView_RowDataBound(object sender,   GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header ||
        e.Row.RowType == DataControlRowType.DataRow ||
        e.Row.RowType == DataControlRowType.Footer)
    {
        e.Row.Cells[1].Visible = false;
    }
}

您是否考虑过使用gridview的
DataKeyNames
属性?通过这种方式,您可以从
GridView
bu中删除'id'列,但仍可以访问页面加载中的'id'值

DataKeyNames = "id"
然后你可以像这样得到id的值

int selRowIndex = GridView1.SelectedIndex;
int selMasterId = Convert.ToInt32(GridView.DataKeys[selRowIndex].Value);
Order master = Order.Get(selMasterId);
或者,您可以尝试在
GridView
OnRowBound
事件中更改列的可见性

protected void GridView_RowDataBound(object sender,   GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.Header ||
        e.Row.RowType == DataControlRowType.DataRow ||
        e.Row.RowType == DataControlRowType.Footer)
    {
        e.Row.Cells[1].Visible = false;
    }
}

您是否有AutoGenerateColumns=“true”?使用AutoGenerateColumns=“true”时,GridView的columns集合未填充,这就是您收到索引超出范围异常的原因。您是否有AutoGenerateColumns=“true”?使用AutoGenerateColumns=“true”时,GridView的columns集合未填充,这就是您收到索引超出范围异常的原因。