DOBON.NET DOBON.NETプログラミング掲示板過去ログ

データテーブルの行移動について

環境/言語:[WinXP C# .NET 3.0]
分類:[.NET]

DataTable内の移動についてお教え下さい。
Formにテキストボックスが3つ配置されています。
「表示」「◀」「▶」の3つです。

「表示」テキストボックスにはデータベースより取得したデータテーブルの値を表示します。
(テキストボックスはバインディングしていません)

「◀」「▶」ボタンをおすと、データテーブルの行の値が変化します。
そのようなコードを書いたのですが、コードが余り良くないと感じます。コードは以下になります。

btnBack_Click、btnFoward_Clickで配列を移動する為に、tdCounterを加算、減算をおこなっています。
ここのコードがスマートではなく感じます。なんらかの関数などを使えばもっとスマートに書けると
思うのですが、何か上手な書き方はないでしょうか?よろしくお願いします。

DataTable dt;
SqlConnection conn;
SqlDataAdapter adp;
//テーブルデータ移動用
int tdCounter = 0;

//Formロード時
dt = new DataTable();
adp = new SqlDataAdapter("SELECT * FROM TABLE", conn);
adp.Fill(dt);

/******************************************************************************/
//テーブルデータ BACK ◀ボタン押下時
/******************************************************************************/
private void btnBack_Click(object sender, EventArgs e)
{
//データテーブルの行数取得
int getTableRowCount = dt.Rows.Count;

//tdCount-1が-1以上になるのを防ぐ。配列が-1にはならない
if (tdCounter -1 != -1)
{
//バックボタンを押したら、1マイナス。
tdCounter -= 1;
//テーブルデータが存在する場合。配列の移動。Back
this.dsiplayTextBox.Text = dt.Rows[tdCounter]["ID"].ToString();
}
}
/******************************************************************************/
//テーブルデータ Foward ▶ボタン押下時
/******************************************************************************/
private void btnFoward_Click(object sender, EventArgs e)
{
//データテーブルの行数取得
int getTableRowCount = dt.Rows.Count;

if (tdCounter < getTableRowCount)
{
//テーブルデータが存在する場合。配列の移動。Foward
this.displayTextBox.Text = dt.Rows[tdCounter]["ID"].ToString();

//フォワードボタンを押したら、1カウント。デーテテーブルの行数以上にならないようにする。
tdCounter += 1;
if (tdCounter == getTableRowCount)
{
tdCounter -= 1;
}
}
}

TABLEデータ
ID(int)
111
222
333
■No32050に返信(昌也さんの記事)
> コードが余り良くないと感じます。コードは以下になります。
> 
良いかはわかりませんが、俺ならこう書きます的なものを。
tdCounter は tdIndex に名前を変更しました。(あと初期値も変更)

        private int tdIndex = -1;     // Form_Load時にIndex=0の要素を表示していないので-1
        /******************************************************************************/
        //テーブルデータ BACK &#9664;ボタン押下時
        /******************************************************************************/
        private void btnBack_Click(object sender, EventArgs e)
        {
            if (tdIndex > 0)
            {
                tdIndex--;
                displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
            }
        }

        /******************************************************************************/
        //テーブルデータ Foward &#9654;ボタン押下時
        /******************************************************************************/
        private void btnFoward_Click(object sender, EventArgs e)
        {
            int getTableRowCount = dt.Rows.Count;
            if ((getTableRowCount > 0) &&
                (getTableRowCount - 1 > tdIndex))
            {
                tdIndex++;
                displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
            }
        }
aさん
ご回答ありがとうございます。お教え頂きましたコードの方がスッキリしていてわかりやすいです。勉強になりました。
また、変数の付け方もtdindexの方がわかりやすかったです。ありがとうございます!

■No32051に返信(aさんの記事)
> ■No32050に返信(昌也さんの記事)
>>コードが余り良くないと感じます。コードは以下になります。
>>
> 良いかはわかりませんが、俺ならこう書きます的なものを。
> tdCounter は tdIndex に名前を変更しました。(あと初期値も変更)
>
> private int tdIndex = -1; // Form_Load時にIndex=0の要素を表示していないので-1
> /******************************************************************************/
> //テーブルデータ BACK &#9664;ボタン押下時
> /******************************************************************************/
> private void btnBack_Click(object sender, EventArgs e)
> {
> if (tdIndex > 0)
> {
> tdIndex--;
> displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
> }
> }
>
> /******************************************************************************/
> //テーブルデータ Foward &#9654;ボタン押下時
> /******************************************************************************/
> private void btnFoward_Click(object sender, EventArgs e)
> {
> int getTableRowCount = dt.Rows.Count;
> if ((getTableRowCount > 0) &&
> (getTableRowCount - 1 > tdIndex))
> {
> tdIndex++;
> displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
> }
> }
>
■No32053に返信(昌也さんの記事)
> aさん
> ご回答ありがとうございます。お教え頂きましたコードの方がスッキリしていてわかりやすいです。勉強になりました。
> また、変数の付け方もtdindexの方がわかりやすかったです。ありがとうございます!
>
> ■No32051に返信(aさんの記事)
>>■No32050に返信(昌也さんの記事)
> >>コードが余り良くないと感じます。コードは以下になります。
> >>
>>良いかはわかりませんが、俺ならこう書きます的なものを。
>>tdCounter は tdIndex に名前を変更しました。(あと初期値も変更)
>>
>> private int tdIndex = -1; // Form_Load時にIndex=0の要素を表示していないので-1
>> /******************************************************************************/
>> //テーブルデータ BACK &#9664;ボタン押下時
>> /******************************************************************************/
>> private void btnBack_Click(object sender, EventArgs e)
>> {
>> if (tdIndex > 0)
>> {
>> tdIndex--;
>> displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
>> }
>> }
>>
>> /******************************************************************************/
>> //テーブルデータ Foward &#9654;ボタン押下時
>> /******************************************************************************/
>> private void btnFoward_Click(object sender, EventArgs e)
>> {
>> int getTableRowCount = dt.Rows.Count;
>> if ((getTableRowCount > 0) &&
>> (getTableRowCount - 1 > tdIndex))
>> {
>> tdIndex++;
>> displayTextBox.Text = dt.Rows[tdIndex]["ID"].ToString();
>> }
>> }
>>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板