2

昨日、フォームのテキスト ボックスに単一の行を表示する次/前のボタンを使用してデータ セットをページングすることについて質問しました。それ以来、次のボタンで次の行に移動することができましたが、一度だけです。その後のクリックはすべて何もしません。ここにいくつかのコードがあります。

ユーザーが検索値を選択して値を押した後に実行されるコード:

  public static int inc = 0;

  protected void ExecuteSelectCopies(string sName)
{
    SqlConnection connection = new SqlConnection(GetConnectionString());
    try
    {
        string sql =
            "SELECT tblCopies.CopyID, tblSoftware.SoftwareName, tblCopies.AssetName, tblCopies.Location,"
            + " tblCopies.LicenceKey, tblCopies.OEM, tblCopies.State, tblCopies.InstallationDate"
            + " FROM tblCopies"
            + " INNER JOIN tblSoftware ON tblCopies.SoftwareID = tblSoftware.SoftwareID"
            + " WHERE tblSoftware.SoftwareName = @SoftwareName"
            + " ORDER BY tblCopies.CopyID";
        SqlDataAdapter adapterH = new SqlDataAdapter();
        SqlCommand select = new SqlCommand(sql, connectionHWM);
        adapterH.SelectCommand = select;
        select.Parameters.Add(new SqlParameter("@SoftwareName", sName));
        //open the connection
        connection.Open();
        dataSetH = new DataSet();
        adapterH.Fill(dataSetH, "Copies");
    }
    catch (Exception ex)
    {
        string msg = "fetch Error:";
        msg += ex.Message;
        throw new Exception(msg);
    }
    finally
    {
        connection.Close();
    }

    NavigateCopies();
}

初めてテキスト ボックスに入力するコード:

    private void NavigateCopies()
{
    DataRow dRow = dataSetH.Tables[0].Rows[inc];
    TextBoxCopyID.Text = dRow.ItemArray.GetValue(0).ToString();
    TextBoxSoftwareName.Text = dRow.ItemArray.GetValue(1).ToString();
    DropDownListAssetName.SelectedItem.Text = dRow.ItemArray.GetValue(2).ToString();
    DropDownListLocation.SelectedItem.Text = dRow.ItemArray.GetValue(3).ToString();
    TextBoxLicence.Text = dRow.ItemArray.GetValue(4).ToString();
    DropDownListType.SelectedItem.Text = dRow.ItemArray.GetValue(5).ToString();
    DropDownListState.SelectedItem.Text = dRow.ItemArray.GetValue(6).ToString();
    TextBoxInstall.Text = dRow.ItemArray.GetValue(7).ToString();
    Session["ds"] = dataSetH;
    Session["increment"] = inc;
}

次の行ボタンのコード: protected void ButtonNext_Click(object sender, EventArgs e) { if (Session["ds"] != null) { dataSetH = (DataSet)Session["ds"]; inc = (int)Session["インクリメント"]; inc++;

        if (inc != dataSetH.Tables[0].Rows.Count)
        {
            NavigateCopies();
        }
        else
        {
            Label1.Text = "No More Rows";
        }
    }
}

したがって、[次へ] ボタンを押すと、次の行が選択されます。その後の各クリックは何もしません。ページ ステータス バーのシンボルは回転しますが、テキスト ボックスには次のレコードが入力されません。これがフォームのリロードと関係があるかどうかはわかりませんが、私が見たすべての例では、ロード時にテーブルまたはグリッドにデータが取り込まれていますが、私の状況では、ユーザー入力後にテキスト ボックスにデータを入力する必要があります。これについての助けは大歓迎です。

その後、コードを編集しました。現在は機能しており、次のボタンでデータセット全体をページングできます。ボタンにキャッチを作成して、ユーザーが最大行数を超えないようにします。

4

2 に答える 2

3

プライベートスコープで inc 変数を定義しているため、最初の行にのみアクセスし、パブリックスコープは static で利用可能にする必要があります

          public static  int inc = 0 ;

また、 DataSet を再度設定します。

            // put Session["ds"] need to put inc value as well your assign
于 2013-07-16T08:46:10.307 に答える
2

あなたが置くのと同じように、価値も置くSession["ds"] 必要がありますinc

protected void ButtonNext_Click(object sender, EventArgs e)
{
    if (Session["ds"] != null)
    {
        int inc;
        if(Session["inc"]==null)
        {
          Session["inc"] =0;
        }
        if(int.TryParse(Session["inc"], out inc)
        {
            inc++;
            Session["inc"] = inc;
            DataSet dataSetH = (DataSet)Session["ds"];

            if (inc <= dataSetH.Tables[0].Rows.Count)
            {
                DataRow dRow = dataSetH.Tables[0].Rows[inc];
                TextBoxCopyID.Text = dRow.ItemArray.GetValue(0).ToString();
                TextBoxSoftwareName.Text = dRow.ItemArray.GetValue(1).ToString();
                DropDownListAssetName.SelectedItem.Text = dRow.ItemArray.GetValue(2).ToString();
                DropDownListLocation.SelectedItem.Text = dRow.ItemArray.GetValue(3).ToString();
                TextBoxLicence.Text = dRow.ItemArray.GetValue(4).ToString();
                DropDownListType.SelectedItem.Text = dRow.ItemArray.GetValue(5).ToString();
                DropDownListState.SelectedItem.Text = dRow.ItemArray.GetValue(6).ToString();
                TextBoxInstall.Text = dRow.ItemArray.GetValue(7).ToString();
            }
        }
    }
}
于 2013-07-16T08:45:20.983 に答える