4

私が持っているもの

いくつかのデータソースにバインドされたグリッドビューがあります。その中に、別のデータソースに明示的にバインドされた別の列 (「リソース」) を追加しました。

コード.aspx

<asp:GridView ID="GridView1"    OnRowCommand="GridView1_RowCommand" OnRowDataBound="GridView1_RowDataBound" runat="server" AutoGenerateColumns="False" DataSourceID="EntityDataSource1">
    <Columns>
        <asp:BoundField DataField="Name" HeaderText="Name" ReadOnly="True" SortExpression="Name" />
        <asp:BoundField DataField="Description" HeaderText="Description" ReadOnly="True" SortExpression="Description" />
        <asp:BoundField DataField="TFSId" HeaderText="TFSId" ReadOnly="True" SortExpression="TFSId" />
        <asp:CheckBoxField DataField="IsBillable" HeaderText="IsBillable" ReadOnly="True" SortExpression="IsBillable" />
        <asp:BoundField DataField="Estimate" HeaderText="Estimate" ReadOnly="True" SortExpression="Estimate" />
        <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
        <asp:TemplateField HeaderText="Resources">
             <ItemTemplate  >
             <asp:UpdatePanel ID="updatepanel1" runat="server" >
                <ContentTemplate>
                     <asp:TextBox ID="TextBox1" runat="server" Width="100px"></asp:TextBox>
                    <asp:PopupControlExtender ID="TextBox1_PopupControlExtender" runat="server"
                                 Enabled="True"  TargetControlID="TextBox1" 
                                 PopupControlID="Panel1" OffsetY="22">
                     </asp:PopupControlExtender>
                    <asp:Panel ID="Panel1" runat="server" Height="116px" Width="145px" 
                         BorderStyle="Solid" BorderWidth="2px" Direction="LeftToRight"
                         ScrollBars="Auto" BackColor="#CCCCCC" Style="display: none">
                             <asp:CheckBoxList ID="CheckBoxList1" runat="server" 
                                 DataSourceID="SqlDataSource1" DataTextField="UserId"
                                 DataValueField="UserId" AutoPostBack="True"
                                 OnSelectedIndexChanged="CheckBoxList1_SelectedIndexChanged">
                             </asp:CheckBoxList>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                                 ConnectionString="<%$ ConnectionStrings:42HNetDbConnectionString %>"
                                 SelectCommand="SELECT DISTINCT [UserId] FROM [Resources]">
                            </asp:SqlDataSource>
                    </asp:Panel>
                </ContentTemplate>
        </asp:UpdatePanel>
       </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

私が欲しいもの:

ユーザーがテキストボックスをクリックするとすぐに、リソースのすべての名前を表示できました。ユーザーは必要な数のリソースを選択できます。私は以下を達成する必要があります:

1.ユーザーがチェックボックスリストをクリックするとすぐに、すべてのリソースのカンマ区切りの名前を表示したい。そのために、onselectedindexchanged イベントを作成しました。

2.ユーザーが最後に選択したものを記憶していないので、記憶する方法についてもいくつかのアイデアが必要です。

私が試したこと:

コードビハインド

   protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
    {


        /*
        string name = "";
        for (int i = 0; i < CheckBoxList1.Items.Count; i++)
        {
            if (CheckBoxList1.Items[i].Selected)
            {
                name += CheckBoxList1.Items[i].Text + ",";
            }
        }
        TextBox1.Text = name;*/
    }

本当の問題は、onselectedindexchanged イベント内で CheckBoxList にアクセスできないことです。

asp.net Webフォームを使用してコードビハインドから更新パネル内のテキストボックス、ラベルにアクセスする方法はあまり役に立たないようです。

どんな助けでも大歓迎です。ありがとう!!!

4

2 に答える 2

2

ついにできた:

コードビハインド

 protected void CheckBoxList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        for (int j = 0; j < GridView1.Rows.Count; j++)
        {
            UpdatePanel up1 = GridView1.Rows[j].FindControl("updatepanel1") as UpdatePanel;
            TextBox tb1 = up1.FindControl("TextBox1") as TextBox;
            CheckBoxList cb1 = up1.FindControl("CheckBoxList1") as CheckBoxList;

            string name = "";
            for (int i = 0; i < cb1.Items.Count; i++)
            {
                if (cb1.Items[i].Selected)
                {
                    name += cb1.Items[i].Text + ",";
                }
            }
            tb1.Text = name;
        }
    }
于 2013-04-16T06:45:50.180 に答える
0
 string strVendorId = string.Empty;
            var vender = new StringBuilder();
            var vendorcollection = cmbVendorId.CheckedItems;
            foreach (var item in vendorcollection)
                vender.Append(item.Value + ",");
            strVendorId = vender.ToString();
            if (strVendorId != "")
            {
                strVendorId = strVendorId.Remove(strVendorId.Length - 1, 1);
            }

このコードは、コンマ区切りの参照コードとして使用できます

于 2013-04-15T05:37:59.773 に答える