从隐藏的边界获取价值?ASP.NET

Wes*_*ieu 9 c# asp.net hidden gridview boundfield

我知道其他人已经提出了我要问的问题,但这些答案对我的问题没有解决方案.

我有一个gridview包含2个BoundFields,2个ButtonFields和一个复选框字段(这是一个TemplateField).

我还有一个数据表,填充了数据库中的数据.

在aspx代码中,我创建了gridview,其中字段设置了最后一个BoundField Visible = false.

在我的代码隐藏中,我添加了colums并将数据源绑定到我的数据表.

但是当我尝试从隐藏的边界字段读取数据时,该字段为空.我不能使用类似问题提到的解决方案的问题是因为人们假设数据被逐个填充,而不是通过将数据表绑定到gridview的数据源.

所以我的问题是:他们是一种从隐藏的边界域获取数据的方法,还可以通过将数据表绑定到gridview的数据源来保留添加数据的可能性吗?如果是这样,从该领域获得价值是否可行?

ps我在visual studio 2010中使用asp.net/c#

ASPX:

<asp:GridView ID="gvSelect" runat="server" AutoGenerateColumns="False" BorderStyle="None" onrowcommand="gvTestSelect_RowCommand">
    <Columns>
        <asp:TemplateField>
            <HeaderTemplate>
                <asp:CheckBox runat="server" ID="cbHeader" OnPreRender="cbHeader_PreRender" />
            </HeaderTemplate>
            <ItemTemplate>
                <asp:CheckBox runat="server" ID="cbItems" />
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="field" HeaderText="Veld" SortExpression="field" />
        <asp:ButtonField DataTextField="up" HeaderText="Omhoog" SortExpression="up" CommandName="up" Text="&uarr;" />
        <asp:ButtonField DataTextField="down" HeaderText="Omlaag" SortExpression="down" CommandName="down" Text="&darr;" />
        <asp:BoundField DataField="hidden" SortExpression="hidden" />
    </Columns>
</asp:GridView>
Run Code Online (Sandbox Code Playgroud)

Code Behind(填写gridview的地方):

//create array list and fill it with all columns
Dictionary<string, string> dict = FillLists.getColumnsByTable(loader, ddlInfoTableI.SelectedItem.Value.ToString());

//loop trough dictionary
foreach (var val in dict)
{
    //create new dtSelect datarow
    DataRow dr = dtSelect.NewRow();

    //set row values for column values
    dr["select"] = false;
    dr["field"] = val.Value.ToString();
    dr["up"] = new ButtonField { CommandName = "up", Text = loader.LoadResourceString(1024), HeaderText = "&uarr;", ButtonType = ButtonType.Button, Visible = true };
    dr["down"] = new ButtonField { CommandName = "down", Text = loader.LoadResourceString(1025), HeaderText = "&darr;", ButtonType = ButtonType.Button, Visible = true };
    dr["hidden"] = val.Key.ToString();

    //add the datarow
    dtSelect.Rows.Add(dr);

    //set datatable session to datatable
    Session["dtSelect"] = dtSelect;

    //set datasource of the gridview to datatable
    gvSelect.DataSource = dtSelect;

    //bind data to gridview
    gvSelect.DataBind();
}
Run Code Online (Sandbox Code Playgroud)

所以现在我需要从gridview中获取数据(特别是隐藏的boundfield),因为除了隐藏的boundfield之外,他们可以编辑gridview,因此这是了解它的原始行的唯一方法.

Jam*_*son 14

为您需要获取的列添加数据键:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="hidden" ...>
Run Code Online (Sandbox Code Playgroud)

添加datakey后,可以使用行索引访问其值:

var rowIndex = 0;
var hiddenValue = (string)GridView1.DataKeys[rowIndex]["hidden"];
Run Code Online (Sandbox Code Playgroud)