0

C# アプリでデータグリッドを作成しようとすると、[編集] ボタンをクリックするとグリッド全体が消えます。私はこれをしばらくの間機能させていましたが、元に戻すことはできません。誰かが私のコードに何か問題があるのを見ることができますか?

ASPX は次のとおりです。

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="True" CodeBehind="frmViewLoadHistory.aspx.cs" Inherits="PBR.ViewLoadHistory" %>
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <br />
    <div id="divGrid" style='position:absolute; width:920px; height:400px; overflow:auto'>
        <asp:DataGrid ID="DataGrid_Roster" runat="server"
    AllowPaging="True" AllowSorting="True" CellPadding="4" ForeColor="#333333" GridLines="None"
    OnCancelCommand="DataGrid_Roster_CancelCommand" 
    OnUpdateCommand="DataGrid_Roster_UpdateCommand" 
    OnEditCommand="DataGrid_Roster_EditCommand">
            <AlternatingItemStyle Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <EditItemStyle BackColor="#999999" Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <PagerStyle BackColor="#284775" Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <SelectedItemStyle BackColor="#E2DED6" Font-Bold="False" Font-Italic="False" 
            Font-Overline="False" Font-Strikeout="False" Font-Underline="False" />
        <Columns>
            <asp:EditCommandColumn ButtonType="PushButton" CancelText="Cancel" 
                EditText="Edit" UpdateText="Update"></asp:EditCommandColumn>
        </Columns>

        </asp:DataGrid>

    </div> 
    <br />

</asp:Content>

コードビハインド:

public string stringSelectedValue { get; set; }
string str2 = System.Configuration.ConfigurationManager.ConnectionStrings["RosterConnectionString"].ConnectionString;

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack == false)
    {
        Show_Data();
    }
}

public void Show_Data()
{
    SqlConnection sqlconnectionStatus2 = new SqlConnection(str2);
    string sqlquery2;

    sqlquery2 = "SELECT * FROM [tblcensus]";

    SqlConnection con2 = new SqlConnection(str2);
    SqlCommand cmd2 = new SqlCommand(sqlquery2, con2);
    SqlDataAdapter adapter2 = new SqlDataAdapter(cmd2);

    // Fill the DataSet.
    DataSet ds2 = new DataSet();
    adapter2.Fill(ds2, "dailyview");

    // Perform the binding.
    DataGrid_Roster.DataSource = ds2;
    DataGrid_Roster.DataBind();

}

protected void DataGrid_Roster_EditCommand(object source,
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    DataGrid_Roster.EditItemIndex = e.Item.ItemIndex;
    DataGrid_Roster.DataBind();
}

protected void DataGrid_Roster_UpdateCommand(object source,
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    // The quantity is in the 7th column.
    TableCell quantityCell = e.Item.Cells[6];

    // The TextBox is the 0th element of the Controls collection.
    TextBox quantityBox = (TextBox)quantityCell.Controls[0];

    // Extract the quantity from the box.
    int quantity = System.Int32.Parse(quantityBox.Text);

    // Use quantity to update the data source.

    // Switch out of edit mode.
    DataGrid_Roster.EditItemIndex = -1;
    DataGrid_Roster.DataBind();
}

protected void DataGrid_Roster_CancelCommand(object source,
    System.Web.UI.WebControls.DataGridCommandEventArgs e)
{
    DataGrid_Roster.EditItemIndex = -1;
    DataGrid_Roster.DataBind();
}

私がそれを機能させたとき、IsPostBack 部分について心配する必要はなかったと断言できますが、エラーをスローする前に何も処理していないように見えました。エラーは発生しなくなりましたが、DataGrid はまったく表示されません。

4

1 に答える 1

2

EditCommand イベント ハンドラーで、グリッドで Databind を呼び出す代わりに、Show_Data メソッドを呼び出します。

DataGrid_Roster.EditItemIndex = e.Item.ItemIndex;
Show_Data();

データはポストバック間でキャッシュされないため、毎回フェッチするか、別のキャッシュ メカニズムを設定する必要があります。

于 2013-07-02T16:10:57.467 に答える