1

これらのパラメーターを持つ Gridview があります。

<asp:GridView runat="server" ID="ItemGrid" CssClass="Grid"
                AutoGenerateColumns="false"
                AutoGenerateDeleteButton="true" OnRowDeleting="RowDeleting"
                AutoGenerateEditButton="true" onRowEditing="RowEdit" 
                OnRowCancelingEdit="CancelRowEdit" onRowUpdating="RowUpdating"
                DataKeyNames="Item_ID">
            <Columns>
                <asp:BoundField HeaderText="Item" DataField="Item"/>
                <asp:BoundField HeaderText="Family" DataField="Family"/>
                <asp:BoundField HeaderText="Structure" DataField="Structure"/>
                <asp:BoundField HeaderText="Updated" ReadOnly="true" DataFormatString="{0:d}" DataField="Updated"/>
            </Columns>
</asp:GridView>

更新すると、次のように呼び出されます。

protected void RowUpdating(object sender, GridViewUpdateEventArgs e){
    int Item_ID = (int)this.ItemGrid.DataKeys[e.RowIndex][0];
//Problem is something right here:
    string Item = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
    string Family = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
    string Structure = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

    ItemTableAdapter taItem = new ItemTableAdapter();
    taItem.UpdateItem(Item, Family, Structure, DateTime.Now, Item_ID);
    //just a <asp:Label> for seeing some output.
    Alert.Text= string.Format("Item:{0}Family:{1}Structure:{2}",Item,Family,Structure);

    this.ItemGrid.EditIndex = -1;
    dataBind();        
}

更新/編集/削除ボタンを生成し、削除機能は希望どおりに機能し、[編集] ボタンは編集可能な TextBoxes を生成します。

私の問題は、更新部分にあります。文字列 Item、Family、Structure は、生成されたテキスト ボックスに入力した新しい値ではなく、古い値を取得しています。
値をハードコーディングすると、データベースに更新され、データベースでDateTime.Now常に正しく更新されるため、更新クエリが機能します。

私はこれを見たり、フォーラムを読んだりして、数日間物事をテストしています。見落としていた単純なものが欠けているだけだと確信しています。

助けてくれてありがとう。

編集: 回答済みですが、興味のある方のために、これは私の dataBind(); です。

protected void dataBind()
{
    ItemTableAdapter taItem = new ItemTableAdapter();
    this.ItemGrid.DataSource = taItem.GetActive();
    this.ItemGrid.DataBind();
}
4

3 に答える 3

1

RowUpdating異なる時間にRowUpdated発砲します。それがあなたの問題ではないかどうかを確認してください。

于 2010-09-14T19:03:45.680 に答える
1

誤ってポストバックでGridViewを再バインドしていますか?初期ロード時にのみデータベースからデータをフェッチする必要があります。

if (!IsPostBack)
{
    Gridview1.Datasource = BLL.SomeClass.Load(SomeRecordId);
    GridView1.DataBind();
}
于 2010-09-14T19:07:06.183 に答える
1

次の方法を使用して、新しい値を取得してみてください。

//string Item = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[1].Controls[0]).Text;
//string Family = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
//string Structure = ((TextBox)ItemGrid.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

string Item = e.NewValues["Item"].ToString();
string Family = e.NewValues["Family"].ToString();
string Structure = e.NewValues["Structure"].ToString();
于 2010-09-14T19:11:36.517 に答える