私はボタンをクリックした後、SQLデータベースからの情報でGridView(「GridViewTournaments」と呼ばれる)を塗りつぶすボタン(SubmitButtonTournamentNameと呼ばれる)を作成しました。 このグリッドビューにはいくつかのデータが表示され、情報とチェックボックスを選択できる2つのドロップダウンリストが含まれています。グリッドビューの下には送信ボタンがあります。asp.net C#gridview count always zero
私がボタンをクリックすると、検証が必要です。ドロップダウンリストの1つでオプションを選択しなかった場合は、その色を変更する必要があります。場合
public void BtnHandler(Object sender, EventArgs e) {
Button btn = (Button)sender;
switch (btn.CommandName) {
case "SubmitButtonTournamentName": {
//fill GridViewTournaments
// sql stuff...
try {
sqlConnection.Open();
IDataReader dr = idbCommand.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(dr);
GridViewTournaments.DataSource = dt;
GridViewTournaments.DataBind();
dr.Close();
} catch (Exception ex) {
System.Diagnostics.Debug.WriteLine("error: " + ex);
} finally {
sqlConnection.Close();
}
}
break;
case "btnSubmitEntry": {
//Here I try to validate the input
bool formError = false;
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[5] { new DataColumn("tourn_name"), new DataColumn("start_date"), new DataColumn("status"), new DataColumn("choice"), new DataColumn("doublePartner") });
int count = GridViewTournaments.Rows.Count;
System.Diagnostics.Debug.WriteLine("gridview count: " + count);
foreach (GridViewRow row in GridViewTournaments.Rows) {
if (row.RowType == DataControlRowType.DataRow) {
CheckBox chkEntry = (row.Cells[5].FindControl("chkEntry") as CheckBox);
if (chkEntry.Checked) {
DropDownList choice = (row.Cells[3].FindControl("ddlChoice") as DropDownList);
DropDownList doublePartner = (row.Cells[4].FindControl("ddlDoublePartner") as DropDownList);
if (choice.SelectedValue.Equals("-1")) {
formError = true;
choice.BackColor = Color.Red;
}
if (doublePartner.SelectedValue.Equals("-1")) {
formError = true;
doublePartner.BackColor = Color.Red;
}
string name = row.Cells[0].Text;
string startDate = row.Cells[1].Text;//(row.Cells[1].FindControl("lblCountry") as Label).Text;
string status = row.Cells[2].Text;
dt.Rows.Add(name, startDate, status, choice, doublePartner);
}
}
}
if (formError == false) {
Server.Transfer("ProccessEntry.aspx", true);
}
GridViewTournaments.DataSource = dt;
GridViewTournaments.DataBind();
}
break;
}
}
「btnSubmitEntry」私は、GridViewのから日付を取得色を変更し、変更された要素とのGridViewを書き換えしようとクリックされた: これは、ボタンのクリックをキャッチし、私のボタンハンドラがあります。
これは私のフォームです:
<asp:GridView ID="GridViewTournaments" HeaderStyle-BackColor="#3AC0F2" HeaderStyle-ForeColor="White"
runat="server" AutoGenerateColumns="false">
<Columns>
<asp:BoundField DataField="tourn_name" HeaderText="Name" ItemStyle-Width="150" />
<asp:BoundField DataField="start_date" HeaderText="Start date" ItemStyle-Width="150" />
<asp:BoundField DataField="status" HeaderText="Status" ItemStyle-Width="150" />
<asp:TemplateField HeaderText="choice">
<ItemTemplate>
<asp:Label ID="lblChoice" runat="server" Text='<%# Eval("choice") %>' Visible="false" />
<asp:DropDownList ID="ddlChoice" runat="server">
<asp:ListItem Text="Choose ..." Value="-1"></asp:ListItem>
<asp:ListItem Text="1st Choice" Value="1"></asp:ListItem>
<asp:ListItem Text="2nd Choice" Value="2"></asp:ListItem>
<asp:ListItem Text="3rd Choice" Value="3"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="doublePartner">
<ItemTemplate>
<asp:Label ID="lblDoublePartner" runat="server" Text='<%# Eval("doublePartner") %>' Visible="false" />
<asp:DropDownList ID="ddlDoublePartner" runat="server">
<asp:ListItem Text="Some name" Value="1"></asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Want to enter?">
<ItemTemplate>
<asp:Label ID="lblEnter" runat="server" Text='<%# Eval("enter") %>' Visible="false" />
<asp:CheckBox runat="server" ID="chkEntry" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:Button ID="btnSubmitEntry" runat="server" Text="Submit" CommandName="btnSubmitEntry" OnClick="BtnHandler" />
問題:
foreachループは、ゼロ行がそれであることが表示されますので、GridViewコントロールの谷なっていません。
私は、コードをテストし、これはゼロを返します。
GridViewTournaments.Rows.Count
私はボタンハンドラがGridViewのからの情報を得ることはありませんので、「GridViewTournamentsは、」ページのコンテキストにバインドされていないこと、だと思う何ですか。
ボタンがページをリロードすることはわかっていますが、私はポストバックを回避したいと思います。
多分私の解決策は慣習ではないので、私が完全に間違っているかどうか教えてください。
あなたはGridViewのにデータをバインドする前に、行をカウントしているが、GridViewの中のデータが既に存在しているのですか? – KanisXXX
はい、「btnSubmitEntry」ボタンをクリックする前に、gridviewにデータがあります。 – Craiten
あなたは 'IsPostback'の中にそのデータをバインドしていますか? – KanisXXX