昨日、フォームのテキスト ボックスに単一の行を表示する次/前のボタンを使用してデータ セットをページングすることについて質問しました。それ以来、次のボタンで次の行に移動することができましたが、一度だけです。その後のクリックはすべて何もしません。ここにいくつかのコードがあります。
ユーザーが検索値を選択して値を押した後に実行されるコード:
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";
}
}
}
したがって、[次へ] ボタンを押すと、次の行が選択されます。その後の各クリックは何もしません。ページ ステータス バーのシンボルは回転しますが、テキスト ボックスには次のレコードが入力されません。これがフォームのリロードと関係があるかどうかはわかりませんが、私が見たすべての例では、ロード時にテーブルまたはグリッドにデータが取り込まれていますが、私の状況では、ユーザー入力後にテキスト ボックスにデータを入力する必要があります。これについての助けは大歓迎です。
その後、コードを編集しました。現在は機能しており、次のボタンでデータセット全体をページングできます。ボタンにキャッチを作成して、ユーザーが最大行数を超えないようにします。