0

ASP.NET は初めてです。私は午前中ずっと試してきましたが、これを機能させることができませんでした。私の DataList1 には、会社名とチェックボックスをリストする子 dataList (childList) があります。CompanyID も隠しフィールド (hiddenCompanyID) に格納しました。

私がやりたいのは、ユーザーがボックス (子 Datalist の下) をチェックすると、イベント (chkChildCompany_CheckedChanged) がトリガーされ、非表示フィールドから CompanyID が取得されるため、データベースの更新を処理できるようになります。子データリストで隠しフィールド コントロールを見つける方法がわかりませんでした。

助けてください、ありがとう、

<asp:DataList BackColor="#ffffff" id="DataList1" DataSourceID="dsCompanyListPartialMatch"  runat="server" Width="80%" DataKeyField="Company1Word"
    UseAccessibleHeader="true"
    CssClass="books"
    HeaderStyle-CssClass="header"
    ItemStyle-CssClass="item"
    AlternatingItemStyle-CssClass="alternating" 
    GridLines="Both"
    CellPadding="0"
    CellSpacing="0" BorderColor="Black"
    ItemStyle-BorderColor="Black" BorderWidth="0"
     HorizontalAlign="Center"
    RepeatDirection="Vertical" 
    >                
    <HeaderTemplate>
        <table border="0" width="100%">
        <tr class="div_hover">
            <th style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; "></th>
            <th style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Num</th>
            <th style="width: 70%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Company Name</th>
            <th style="width: 10%; border-right:1px solid black; border-spacing:0;  text-align:center; ">Add?</th>
        </tr>
        </table>
    </HeaderTemplate>

    <ItemStyle BorderColor="black" Font-Size="Medium" />

    <ItemTemplate>
        <table border="0" width="100%">
        <tr class="div_hover">
            <td style="width: 5%; border-right:1px solid black; border-spacing:0;  text-align:center; ">        
            <asp:LinkButton>
                <asp:LinkButton ID="LinkButton2" runat="server" Text="+" CommandArgument='<%#Container.ItemIndex%>'
                OnCommand="LinkButton1_Command"  
                Font-Underline="false"       
                Height="25"      
                Font-Bold="true"                  
                ></asp:LinkButton>
            </td>
            <td style="width: 5%; border-right:1px solid black; border-spacing:0; text-align:right; padding-right:10px;"><%#Eval("Row")%></td>
            <td style="width: 70%"><asp:Literal ID="litFoo" runat="server" Text='<%#Eval("Company")%>' /> </td>
            <td style="width: 10%;text-align:right;">
                <div style="<%# (Eval("CompanyID") == null || Eval("CompanyID").ToString() == "") ? "": "display: none" %>">
                    <asp:CheckBox id="check1" runat="server" />
                </div>

                <div style="<%# (Eval("CompanyID") == null || Eval("CompanyID").ToString() != "") ? "": "display: none" %>">
                <asp:HyperLink   
                    ID="HyperLink1"   
                    runat="server" ForeColor="Blue"
                    Text='<%# Eval("CompanyID")%>' 
                    NavigateUrl='<%# Eval("CompanyID", "/Apps/ERP/Other/CompanyInfo.asp?CompanyID={0}")%>'                               
                />
                </div> 
            </td>

            <asp:Label ID="lblRow" Visible="False" runat="Server" Text='<%# DataBinder.Eval(Container.DataItem, "Row") %>' />
        </tr>    
        </table>      
            <asp:Panel ID="pnlChildView" runat="server" style="padding-left:200px;">
                <asp:DataList ID="childList" runat="server" Width="100%">
                   <ItemTemplate>
                       <div  class="div_hover">
                        <table class="table1" width="80%">
                       <tr>
                          <td style="width: 60%; border-right:0px solid black; border-spacing:0;">&#8226; <%#Eval("CompanyName")%></td>
                           <td style="width: 20%;text-align:right; "><a href="/Apps/ERP/Other/CompanyInfo.asp?CompanyID=<%#Eval("CompanyID")%>" ><%#Eval("CompanyID")%></a></td> 

                           <td style="width: 20%;text-align:right;">
                                <asp:CheckBox id="chkChildCompany" runat="server" value="123Test"
                                AutoPostBack="true"
                               OnCheckedChanged="chkChildCompany_CheckedChanged"  /></td>                          
                           <asp:HiddenField ID="hiddenCompanyID" runat="server" Value='<%#Eval("CompanyID") %>' />                    
                       </tr>
                        </table>
                        </div>
                   </ItemTemplate>
               </asp:DataList>
           </asp:Panel>
    </ItemTemplate>           
</asp:DataList>

チェックボックスイベント

protected void chkChildCompany_CheckedChanged(object sender, EventArgs e)
    {
        //Process through child DataList (childList)
        //Capture the CompanyID from hidden field value if checkbox is checked;
        // Then I will update the database record with the ID....
    }
4

4 に答える 4

1

チェックボックスに属性を追加し、チェックボックス自体から必要な値を取得します。

<asp:CheckBox id="chkChildCompany" runat="server" value="123Test"
                                AutoPostBack="true"      CustomAttribute='<%#Eval("CompanyID") %>'
                               OnCheckedChanged="chkChildCompany_CheckedChanged"  />

分離コード:

var CompanyID = (sender as CheckBox).Attributes["CustomAttribute"]
于 2013-10-08T22:05:20.123 に答える
1

これに取り組むためのいくつかの異なる方法。私の最初の本能は、sender を適切な型にキャストしてから、.Parent プロパティをチェックすることです。これにより、おそらく次のことが可能になります。

HiddenField hidden = (HiddenField) myCheckbox.Parent.FindControl("hiddenCompanyID");

それがうまくいかない場合...別のオプションは、チェックボックスによってトリガーされる、適切な非表示フィールド値が既に含まれているポストバック参照を埋め込むことです。または、 CommandArgument パラメータを受け入れるボタンがそこにあるように、少し変更します。この場合、<%#Eval("CompanyID") %> に設定するだけで、イベント ハンドラーで使用できるようになります。

于 2013-10-08T21:59:20.530 に答える
0

NamigContainerプロパティを使用してを取得してDataListItemから、次を使用できますFindControl

protected void chkChildCompany_CheckedChanged(object sender, EventArgs e)
{
    var chk = (CheckBox) sender;
    var item = (DataListItem) chk.NamingContainer;
    var hiddenCompanyID = (HiddenField) item.FindControl("hiddenCompanyID");
    // here you are ...
} 

ところで、この手法は、 などのすべての Web データバインド コントロールで機能RepeaterGridViewます。NamingContainerParent.Parent

于 2013-10-08T21:58:46.387 に答える
-1

あなたの場合、非表示フィールドではなく ViewState に CompanyID を保存する必要があります。

ViewState["MicrosoftID"] = "4536";

後で、次のようにアクセスできます。

protected void chkChildCompany_CheckedChanged(object sender, EventArgs e)
    {
        string companyID = ViewState["MicrosoftID"];
    }

それが役立つことを願っています!

于 2013-10-08T21:59:06.293 に答える