2

SQLにバインドされたグリッドビューがあります。一部の列にはビット値があります。C#を使用して値をグリッドビューに取り込むと、チェックボックスが表示されます。その列の値をテキストに抽出する必要があります。

    SqlConnection sConnection = new SqlConnection(MyConnectionString);
    SqlCommand sCommand = new SqlCommand();
    using (sConnection)
    {
        sCommand.Connection = sConnection;
        sCommand.CommandText = "MyStoredProcedure";
        sCommand.CommandType = CommandType.StoredProcedure;
        sCommand.Connection.Open();
        SqlDataReader reader = sCommand.ExecuteReader();
        if (reader.HasRows)
        {
            while (reader.Read())
            {
                gridView.DataSource = reader;
                gridView.DataBind();
            }
            for (int i = 0; i < gridView.Rows.Count; i++)
            {
                ListBox1.Items.Add(gridView.Rows[i].Cells[3].Text);
            }
        }
    }

gridview列のデータ型は「ビット」です。データベースやストアドプロシージャにアクセスして、そこにあるものを変更することはできません。どういうわけか「0」または「1」の値を抽出する必要がありますが、上記のように抽出すると、テキストが空白になります。

また、「GetOrdinal」を使用してみました。データベースからTrue/False値が返されましたが、グリッドビューの各アイテムの値を取得する方法がわかりませんでした。

    if (!reader.IsDBNull(reader.GetOrdinal("MyColumn1")))
    {
        ListBox1.Items.Add(reader.GetOrdinal("MyColumn1").ToString());
    }
4

3 に答える 3

1

総括:

  • 生成されたチェックボックスを見つけて、その「チェック済み」プロパティの値を取得できる必要があります。

  • これを行うには、GridViewRowでFindControl()メソッドを使用できる必要があります。

  • FindControlを使用するには、CheckBoxに予測可能な名前が必要です。
  • 予測可能な名前を取得するには、その列をTemplateColumnにして、ASPXページのマークアップでチェックボックスの名前を指定できるようにする必要があります。

ここに完全なワーキングセットのコードがあります:http: //www.codeproject.com/Articles/25056/The-RIGHT-Way-to-Use-Checkboxes-in-a-NET-Repeater

これはリピーターのコードを示していますが、これは他のDataBoundコントロールの原則と一般的なコードと同じです。

以下のコードは、DB名に一致するように変更を加えて機能するはずです。

 <asp:TemplateField> 
   <ItemTemplate > 
       <asp:checkbox id="MyColumnNameCheckbox" runat="server" /> 
   </ItemTemplate> 
 </asp:TemplateField> 

    string defaultvalue = "0"; // To be used to display the value of the original bit field.
    foreach (GridViewRow row in GridView1.Rows) 
    { 
     CheckBox chkBx = (CheckBox)row.FindControl("MyColumnNameCheckbox"); 

        if (chkBx != null && chkBx.Checked) 
        { 
            defaultvalue = "1";
        } 
    } 
于 2012-09-11T19:54:40.770 に答える
1

私はそれを理解することができました。デイヴィッド・ストラットン、私を正しい方向に向けてくれてありがとう。最初に動的に作成されたコントロールにIDを割り当てることでそれを行いました。次に、FindControl()を実行しました。

Control ctrl = GridView1.SelectedRow.Cells[4].Control[0];
ctrl.ID = "ctrl";
Boolean result = Convert.ToBoolean(((Checkbox)GridView1.Rows[0].Cells[4].FindControl("ctrl")).Checked);
TextBox1.Text = result.ToString();

これは、「True」または「False」の値を返します。

再度、感謝します。

于 2012-09-19T17:11:38.113 に答える
1

それを解決する別の方法:

bool result = (GridView1.SelectedRow.Cells[4].Control[0] as Checkbox).Checked;
TextBox1.Text = result.ToString();

それはより少ないコードで問題を解決します:)

于 2017-11-29T18:06:26.720 に答える