11

私が尋ねようとしている質問が他の人からすでに尋ねられていることは知っていますが、それらの答えは私の問題の解決策ではありません.

2 つの BoundFields、2 つの ButtonFields、およびチェックボックス フィールド (TemplateField) を含むグリッドビューがあります。

データベースからのデータで満たされたデータテーブルもあります。

aspx コードでは、フィールドが最後の BoundField に設定されたグリッドビューを作成しますVisible = false

コード ビハインドでは、列を追加し、データ ソースをデータ テーブルにバインドします。

しかし、非表示の境界フィールドからデータを読み取ろうとすると、そのフィールドは空です。同様の質問で言及されているソリューションを使用できない問題は、グリッドビューのデータソースにデータテーブルをバインドするのではなく、データが1つずつ入力されると人々が想定しているためです。

私の質問は次のとおりです。非表示の境界フィールドからデータを取得し、データテーブルをグリッドビューのデータソースにバインドしてデータを追加する可能性を保持する方法ですか? もしそうなら、そのフィールドから値を取得することは可能ですか?

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>

コード ビハインド (グリッドビューを埋める場所):

//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();
}

したがって、非表示のboundfieldを除いてgridviewを編集できるため、gridviewから(特に非表示のboundfieldから)データを取得する必要があります。これが、元の行がどの行であったかを知る唯一の方法です。

4

4 に答える 4

17

取得する必要がある列のデータ キーを追加します。

<asp:GridView ID="GridView1" runat="server" DataKeyNames="hidden" ...>

データキーを追加したら、行インデックスを使用してその値にアクセスできます。

var rowIndex = 0;
var hiddenValue = (string)GridView1.DataKeys[rowIndex]["hidden"];
于 2012-04-05T15:19:09.633 に答える
1

このコードを使用できます。私はそれをテストしました。

TextBox1.Text = GridView1.DataKeys[e.NewSelectedIndex].Value.ToString();

于 2013-06-22T10:24:59.053 に答える
0

これは非常に古い投稿ですが、まだ興味がある人には、もっと簡単な方法があります。これを置き換えます:

Visible = false

これとともに:

ItemStyle-CssClass="c_hidden"

次に、「display:none」でクラスを作成します。効果は同じですが、アプリケーションは値を見ることができます。

于 2021-06-04T16:40:34.007 に答える