0

私のグリッドビューにはチェックボックス列があり、グリッドビューを辞書にバインドしています。Idチェックボックスから対応するものを取得する必要があります。

私の辞書には、次のようなキー値があります

Id         Name
--         ----
 1         Arts
 2         Science
 3         Engineering

ここでは、このチェックボックスの値を次のようにバインドしようとしました

<asp:TemplateField>
    <ItemTemplate>
      <asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" 
                                                       runat="server" />
    </ItemTemplate>
</asp:TemplateField>

<asp:TemplateField HeaderText="Department">
    <ItemTemplate>
         <%# Eval("Key.Name") %>
    </ItemTemplate>
    <HeaderStyle HorizontalAlign="Left" />
</asp:TemplateField>

コードビハインドから、次のように試しました

foreach (GridViewRow row in gridDepartments.Rows)
        {
            CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");

            if (chkSelItem.Checked)
            {
                int departmentId = int.Parse(chkSelItem.Text);
                ////
                ////                 
            }
        }

エラーがスローされるか、チェックボックスの値が表示されません。

私も試してみましFindControlたが、それを使用しませんでした。ペアの coz は、key & Value(別のクラスを継承する) クラスと bool を使用しています。それがこのようにしようとしていることです。誰かがここで私を助けてくれますか、前もって感謝します.....

4

4 に答える 4

1

Aspxページ:

<asp:CheckBox ID="chkSelItem" Text="<%# Eval("Key.Id") %>" runat="server" />

コードビハインドで、アイテムがnullでないことを確認するためのチェックを追加します。

    CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");

    if (chkSelItem != null && chkSelItem.Checked && !string.IsNullOrEmpty(chkSelItem.Text))
    {

        int departmentId = int.Parse(chkSelItem.Text);                
    }
于 2012-06-22T06:29:26.430 に答える
1
You can try this one...

Bind id to lable instead of to checkbox as below.

<asp:TemplateField>     
<ItemTemplate>       
<asp:CheckBox ID="chkSelItem" runat="server" />     

<asp:Label ID="lblSelectedItem" value=<%# Eval("Key.Id")) %> visible="False"/>
</ItemTemplate> </asp:TemplateField>



In codebehind try this

foreach (GridViewRow row in gridDepartments.Rows)         
{             
      CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");
       Label lblSelectedItem= (Label)row.FindControl("lblSelectedItem");

      if (chkSelItem.Checked) 
      {
                 int departmentId = int.Parse(lblSelectedItem.Text); 
      }
} 



Hope this is what u want...
于 2012-06-22T06:32:44.180 に答える
1

使用する

CheckBox chkSelItem = (CheckBox)row.cell[0].FindControl("chkSelItem");// Replace row.cell[0] accrding to you celll index

それ以外の

 CheckBox chkSelItem = (CheckBox)row.FindControl("chkSelItem");
于 2012-06-22T06:15:20.937 に答える
1

値に割り当ててテキストプロパティを取得しているため、値の代わりにテキストを使用する必要があると思います。テキストは空の文字列になり、int で解析すると例外がスローされます。

int.Parse(chkSelItem.Text);

<asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" runat="server" />

だろう

<asp:CheckBox ID="chkSelItem" Text="<%# Eval("Key.Id") %>" runat="server" />

または

チェックボックスの値を使用する必要がある場合は、テキストではなく値にアクセスします

<asp:CheckBox ID="chkSelItem" value="<%# Eval("Key.Id") %>" runat="server" />

int departmentId = int.Parse(chkSelItem.Attributes["value"].ToString());
于 2012-06-22T06:17:26.240 に答える