PDA

View Full Version : سوال: عدم تغيير محتواي gridview هنگام ويرايش



amironline
شنبه 13 مهر 1387, 16:42 عصر
من يه gridview دارم و اطلاعاتم رو با استفاده از StoredProcedures به DataSet ميريزم و بعدش به gridview بايند مي‌كنم

كد Polls.aspx


<%@ Page Language="C#" MasterPageFile="~/Admin/Admin.master" AutoEventWireup="true" CodeFile="Polls.aspx.cs" Inherits="Admin_Polls" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
سوال جديد<br />
<asp:TextBox ID="txtQuestion" runat="server" Columns="45" CssClass="inputsfa"></asp:TextBox>&nbsp;<asp:Button
ID="btnAddQuestion" runat="server" CssClass="button" OnClick="btnAddQuestion_Click"
Text="اضافه كن" /><br />
<br />
<asp:GridView ID="gvQuestions" runat="server" AllowPaging="True" AutoGenerateColumns="False"
Width="423px" DataKeyNames="QuestionID" CellPadding="4" ForeColor="#333333" GridLines="None"
OnRowEditing="gvQuestions_RowEditing"
OnRowCancelingEdit="gvQuestions_RowCancelingEdit"
OnRowUpdating="gvQuestions_RowUpdating" OnRowDeleting="gvQuestions_RowDeleting">
<EmptyDataTemplate>
هيچ نظرسنجي وجود ندارد
</EmptyDataTemplate>
<Columns>
<asp:TemplateField HeaderText="سوال">
<EditItemTemplate>
<asp:TextBox ID="txtQuestionText" runat="server" CssClass="inputsfa" Text='<%# Bind("QuestionText") %>'></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("QuestionText") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="فعال">
<EditItemTemplate>
<asp:CheckBox ID="chbEditIsCurrentQuestion" runat="server" Checked='<%# Bind("IsCurrentQuestion") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("IsCurrentQuestion") %>'
Enabled="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="آرشيو">
<EditItemTemplate>
<asp:CheckBox ID="chbEditArchived" runat="server" Checked='<%# Bind("Archived") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:CheckBox ID="CheckBox2" runat="server" Checked='<%# Bind("Archived") %>' Enabled="false" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="تاريخ">
<EditItemTemplate>
<asp:TextBox ID="txtAddedDate" runat="server" Text='<%# Bind("AddedDate", "{0:d}") %>' Enabled="false" Columns="15"></asp:TextBox>
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Bind("AddedDate", "{0:d}") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField CancelText="انصراف" DeleteText="حذف" EditText="ويرايش" InsertText="اضافه"
NewText="جديد" SelectText="انتخاب" ShowEditButton="True" UpdateText="ذخيره" HeaderText="عمليات" InsertVisible="False" ShowDeleteButton="True" ShowHeader="True" />
</Columns>
<FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#EFF3FB" />
<EditRowStyle BackColor="#2461BF" />
<SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
<PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
<HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />

</asp:GridView>
<br />
</asp:Content>



كد Polls.aspx.cs


using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Admin_Polls : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
GridViewBind();
}
protected void btnAddQuestion_Click(object sender, EventArgs e)
{
PollsQuestions.SaveQuestion(txtQuestion.Text, true, false);
Response.Redirect("~/Admin/Polls.aspx");
}

protected void gvQuestions_RowEditing(object sender, GridViewEditEventArgs e)
{
gvQuestions.EditIndex = e.NewEditIndex;
GridViewBind();
}

private void GridViewBind()
{
DataSet pqDataSet = PollsQuestions.GetQuestions();
gvQuestions.DataSource = pqDataSet.Tables[0].DefaultView;
gvQuestions.DataBind();
}

protected void gvQuestions_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
gvQuestions.EditIndex = -1;
GridViewBind();
}
protected void gvQuestions_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
int QuestionID = int.Parse(gvQuestions.DataKeys[0].Value.ToString());
string QuestionText = ((TextBox)gvQuestions.Rows[e.RowIndex].FindControl("txtQuestionText")).Text;
bool IsCurrentQuestion = ((CheckBox)gvQuestions.Rows[e.RowIndex].FindControl("chbEditIsCurrentQuestion")).Checked;
bool Archived = ((CheckBox)gvQuestions.Rows[e.RowIndex].FindControl("chbEditArchived")).Checked;
PollsQuestions.UpdateQuestion(QuestionID, QuestionText, IsCurrentQuestion, Archived);
gvQuestions.EditIndex = -1;
GridViewBind();

}
protected void gvQuestions_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
int QuestionID = int.Parse(gvQuestions.DataKeys[0].Value.ToString());
PollsQuestions.DeleteQuestion(QuestionID);
gvQuestions.EditIndex = -1;
GridViewBind();

}
}


مشكلي كه من دارم اينه كه هنگام ويرايش محتواي فيلدها عوض نميشه
البته StoredProcedures مشكل نداره چون وقتي با Debug مقدار QuestionText و بقيه متغييرها رو در تابع gvQuestions_RowUpdating مي‌بينم همون مقدار قبلي رو دارن

amironline
دوشنبه 15 مهر 1387, 07:04 صبح
مشكل من اين بود كه رويداد Page_Load بايد بصوزت زير نوشته ميشد


protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
GridViewBind();
}