3

ASP .NET / C#のGridViewのCheckBox列で苦労しています。終了すると、このページに私のオフィスの現在のオープンポジションが表示されます。応募したい数のポジションを確認して、次の画面(実際の応募が始まる場所)に進むことができるはずです。

これは、[今すぐ適用]ボタンがクリックされたときに実行するルーチンです。上司やここにいる人々から提案された他の12の組み合わせを試した後、このコードをここで見つけました。私がそれを実行すると、isChecked = falseなので、そのifステートメント内では何も実行されません。明らかな何かが欠けていますか?

for (int i = GridView1.Rows.Count - 1; i > -1; i--)
{
    GridViewRow row = GridView1.Rows[i];
    bool isChecked = ((CheckBox)row.FindControl("cbx_apply")).Checked;

    if (isChecked)
    {
        try
        {
            Response.Write("Hello world");
            PositionsAppliedFor.Add(Convert.ToInt32((GridView1.Rows[i].Cells[1].Text)));
            Session["SelectedPositionIDList"] = PositionsAppliedFor;
        }
        catch (Exception error)
        {
            Response.Write(error.Message);
        }
    }
}

編集:また、ifステートメント内で行っていることは重要ではないことに気づきました。/something/を実行させようとしているだけです。

ASP.NET:

<asp:GridView ID="GridView1" runat="server" 
              onselectedindexchanged="UpdateSelectedPostions">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox ID="cbx_apply" runat="server" 
                              OnCheckedChanged="UpdateSelectedPostions"
                              AutoPostBack="false"/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

シンプルで、おそらく多くが欠けています。ASP.NETは/非常に/初めてです。

ここで、グリッドのデータをロードしてバインドします。

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()";
command = new SqlCommand(sqlstatement, connection);
ds = new DataSet();
adapter = new SqlDataAdapter(command);
builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
connection.Close();

うまくいけば、これで十分です。私が持っているのはこれだけだからです。私はまだページに何も載せていません-これらのばかげたチェックボックスを私に同意させようとしているだけです。

4

2 に答える 2

8

バインディングコードが次のようなブロックにあることを確認してください。

if (!Page.IsPostBack)
{

}

そうしないと、各ポストバックのチェックボックスが再作成されるため、チェックされているという事実が失われます。

于 2012-06-26T14:21:44.150 に答える
5

コードの場合

string sqlstatement = "SELECT * FROM dbo.POSITION WHERE PositionStartDate < GETDATE() AND PositionEndDate > GETDATE()";
command = new SqlCommand(sqlstatement, connection);
ds = new DataSet();
adapter = new SqlDataAdapter(command);
builder = new SqlCommandBuilder(adapter);
adapter.Fill(ds);
GridView1.DataSource = ds.Tables[0];
GridView1.DataBind();
connection.Close();

page_loadメソッドでは、これは投稿するたびに呼び出されます。これを読むと、これについての理解が深まります。

ポストバックするたびにこのコードが実行されないようにするには、コードをこれでラップします

if(!Page.IsPostBack)
{

}

また、補足として、CheckChangedとSelectedIndexChangedの両方でUpdateSelectedPostionsを呼び出していますが、これを行うつもりですか?

于 2012-06-26T14:21:36.783 に答える