0

編集:指摘された最初の返信からhfを追加しました。これにより、他のいくつかの問題が解決されましたが、それでも問題は解決しませんでした。

ユーザーがデータベースに何度も行き来することなく複数のアイテムを作成および削除できるように、一時的な保持のために多くの非表示フィールド(50のうち2つだけを使用します)を使用してリストをグリッドビューにバインドしようとしています創造。BoundFields へのバインドとリコールは問題ありません。ただし、隠しフィールドの値を取り戻そうとすると、null として返されます。非表示フィールドへのバインドに問題がある可能性があります。これが私のコードです

ASP:

<asp:GridView ID="grdOtherCarrier" runat="server" AutoGenerateColumns="False">
<Columns>
<asp:BoundField HeaderText="Sequence" DataField="Sequence"></asp:BoundField>
<asp:BoundField HeaderText="Pay ID" DataField="PayID"></asp:BoundField>
<asp:BoundField HeaderText="Provider" DataField="Provider"></asp:BoundField>
            <asp:TemplateField HeaderText="Actions">
                <ItemTemplate>  
                    <asp:HiddenField ID="hfInsuredLastName" Value="<%#Eval("InsuredLastName")%>" runat="server" />
                    <asp:HiddenField ID="hfInsuredFirstName" Value="<%#Eval("InsuredFirstName")%>" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>

C#/コード ビハインド:

    protected void lblSubmitOtherCarrier_Click(object sender, EventArgs e)
    {
        List<OtherCarrier> OCList = new List<OtherCarrier>();

        OtherCarrier OC;

 foreach (GridViewRow row in grdOtherCarrier.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                OC = new OtherCarrier();
                String Sequence = row.Cells[0].Text.ToString() ; // primary value
                String PayID = row.Cells[1].Text.ToString(); // primary value
                String Provider = row.Cells[2].Text.ToString();    // primary value

                HiddenField InsuredLastName = (HiddenField)row.FindControl("hfInsuredLastName");
                HiddenField InsuredFirstName = (HiddenField)row.FindControl("hfInsuredFirstName");

                OC.Sequence = Sequence;
                OC.PayID = PayID;
                OC.Provider = Provider;
                OC.InsuredLastname = InsuredLastName.Value.ToString();
                OC.InsuredFirstName = InsuredFirstName.Value.ToString();

                OCList.Add(OC);
            }
        }
        OC = new OtherCarrier();

        OC.Sequence = txtSequence.Text;
        OC.PayID = txtPayID.Text;
        OC.Provider = txtProvider.Text;
        OC.InsuredLastname = txtInsuredLastname.Text;
        OC.InsuredFirstName = txtInsuredFirstName.Text;
        OCList.Add(OC);

        TD.OtherCarrierList = OCList;

        grdOtherCarrier.DataSource = OCList;
        grdOtherCarrier.DataBind();

        mpeAddOtherCarrier.Hide();
        txtSequenceNo.Text = (grdOtherCarrier.Rows.Count + 1).ToString();
     }

非表示フィールドから OC.InsuredLastname を割り当てると、非表示フィールドが null 値として表示されます。正しく読んでいないか、正しく書かれていません。

4

1 に答える 1

1

それで...

あなたはコントロールを見つけようとしています

(HiddenField)row.FindControl("InsuredLastName");

ご覧InsuredLastNameのとおり、HTMLでコントロール名を明示的に言うと名前が付けられます。

<asp:HiddenField 
    ID="hfInsuredLastName" 
    Value="<%#Eval("InsuredLastName")%>" 
    runat="server" />

名前付きhfInsuredLastName

あなたがする必要があるのは、呼び出しをに変更することです

(HiddenField)row.FindControl("hfInsuredLastName")
于 2011-06-03T16:18:26.637 に答える