الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

إضافة سطر جديد في Gridview

بدأه majed123 في 26 فبراير 2008 · 3 رد · 1,706 مشاهدة · في ASP.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

أريد كيفية إضافة سطر جديد فارغ في GridView وإدخال بيانات في GridView بشكل عام بإضافة عدد من السطور ولكن دون أن يتم إدخال ذلك في قاعدة البيانات إلا في حال الضغط على زر إضافة، وهذا زر الإضافة خارج GridView ويوجد زر إضافة آخر موجود في GridView ليسمح بالسطر الجديد الفارغ

بمعنى أن تتم الإضافة في Client Side وبعد الضغط على زر إضافة تذهب كل البيانات إلى قاعدة البيانات

هذه فكرة Master & Details

post-22929-1204015277_thumb.jpg

PMI_Logo_1.jpg

مدير مشاريع محترف - PMP
محلل أنظمة معتمد
مدير فريق برمجة تطبيقات ويب .Net

======|||||=====

======@ @====
==o0o== ( ) ==o0o===
================
كل منا يحتاج إلى الإرادة حتى يستطيع أن يقوم بعمله

#2

قم بتفعيل ShowFooter حتى تستطيع اظهار السطر السفلي من الجريد ,حيث تستطيع وضع عناصر الاضافة في هذا السطر

ثانيا قم بتحويل كل الBoundField الى TemplateField كي تستطيع اضافة حقول النص في اسفل كل عمود

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataSourceID="SqlDataSource1"
			ShowFooter="True">
			<Columns>
				<asp:TemplateField HeaderText="FirstName" SortExpression="FirstName">

					<FooterTemplate>
						<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
					</FooterTemplate>
					<ItemTemplate>
						<asp:Label ID="Label1" runat="server" Text='<%# Bind("FirstName") %>'></asp:Label>
					</ItemTemplate>
				</asp:TemplateField>
				<asp:TemplateField HeaderText="LastName" SortExpression="LastName">

					<FooterTemplate>
						<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
					</FooterTemplate>
					<ItemTemplate>
						<asp:Label ID="Label2" runat="server" Text='<%# Bind("LastName") %>'></asp:Label>
					</ItemTemplate>
				</asp:TemplateField>
				<asp:TemplateField>
					<FooterTemplate>
						<asp:Button ID="Button2" runat="server" Text="Button" />
					</FooterTemplate>
				</asp:TemplateField>
			</Columns>
		</asp:GridView>

اخيرا هناك عمود لزر الاضافة .

يمكنك الحصول على المدخلات كالتالي:

((TextBox)GridView1.FooterRow.FindControl("TextBox2")).Text

تم تعديل هذه المشاركة بواسطة madani في 26 فبراير 2008 في 16:34

#3

أخ مدني

الظاهر إنك ما فهمت علي، بس أنا محتاج أولا إضافة سطر جديد في GridView

والطريقة اللي حكيتلي عليها ما بتفيدني هذه بتفيد في حالة التعديل مثلاً بحيث يتم إظهار السجل في حالة Edit Mode

وثانياُ ما أحتاجه أيضاً أن تكون الإضافة فقط في بداية الأمر عند كمبيوتر العميل وبعد الضغط على زر الإضافة أو الحفظ في أعلى الصفحة يتم قراءة كافة البيانات التي تمت إضافتها في Grv ثم تحويلها إلى قاعدة البيانات

عملية تحويل المدخلات إلى قاعدة البيانات سهلة ومافيها شي، بس اللي بطلبه كيفية إدخال وإضافة بيانات مؤقتة في Grv

PMI_Logo_1.jpg

مدير مشاريع محترف - PMP
محلل أنظمة معتمد
مدير فريق برمجة تطبيقات ويب .Net

======|||||=====

======@ @====
==o0o== ( ) ==o0o===
================
كل منا يحتاج إلى الإرادة حتى يستطيع أن يقوم بعمله

#4

اعتقد ان العمل على الclient side سيتطلب الكثير من الجافا سكريبت ثم يجب عليك ان ترسل البيانات الى السيرفر بطريقة معينة لان السيرفر لا يعلم عن الاسطر التي تم حفظها على الكلاينت لانه لا يوجد viewstate .

انا اقترح ان تعتمد على الviewstate ,بحيث ان العميل يحفظ البيانات في المرة الاولى في الviewstate و عندما يقرر فعلا حفظها نهائيا,تقوم بارسالها الى قاعدة البيانات:

دالة جلب البيانات:

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

	private void BindGrid()
	{
		DataTable tbl = ViewState["tbl"] != null ? (DataTable)ViewState["tbl"] : ((DataView)SqlDataSource1.Select(new DataSourceSelectArguments())).Table;
		GridView1.DataSource = tbl;
		GridView1.DataBind();
		ViewState["tbl"] = tbl;
	}

الزر الذي يظهر لنا سطر الاضافة (لانه سيكون مخفي في البداية)

protected void Button1_Click(object sender, EventArgs e)
	{
		GridView1.ShowFooter = true;
		BindGrid();
}

زر اضافة البيانات الى الviewstate :

  protected void Button3_Click(object sender, EventArgs e)
	{
DataTable tbl = (DataTable)ViewState["tbl"];
		DataRow dr = tbl.NewRow();
		dr["FirstName"] = ((TextBox)GridView1.FooterRow.FindControl("FirstNameTB")).Text;
		dr["LastName"] = ((TextBox)GridView1.FooterRow.FindControl("LastNameTB")).Text;
		tbl.Rows.Add(dr);
		tbl.AcceptChanges();
		ViewState["tbl"] = tbl;
		BindGrid();
	}

بمجرد نقر الزر سيتم اضافة السطر الى الجريد و يظهر بشكل عادي.لو قر العميل الحفظ النهائي فكلما عليك فعلة هو الحصول على الDataTable من الviewstate و استعمال الSqlDataAdapter لعمل update :

myAdapter.Update(tbl);

في الاخير,مشكلة الviewstate انه لو عاد العميل الى الصفحة الاولى(Back) فسيتم محو البينانات المضافة,لذلك ربما استعمال الCache يكون افضل

تم تعديل هذه المشاركة بواسطة madani في 26 فبراير 2008 في 19:39

مواضيع مشابهة