PDA

View Full Version : ثبت اطلاعات به صورت جدولی- گریدی



salmah
یک شنبه 11 مرداد 1394, 22:55 عصر
سلام من یه فرمی دارم که کاربر درخواست هاش را ثبت میکنه من به صورت textbox کار کردم
الان کارفرما خواسته تا همون طور که به صورت فرم جدولی قبلا توی برگ درخواست این کار را انجام میدادن الان هم همین جور درخواست ها ثبت بشه
یعنی 5-6 تا سطر پر بشه بعد دکمه ثبت زده بشه
تعداد سطر ها هم محدوده 11 سطره

شما ایده یا روشی سراغ دارید
133859

mamali92
دوشنبه 12 مرداد 1394, 02:40 صبح
سلام دوست عزیز؛
بهترین راه اینه که از یه گریدویو استفاده کنی اما مشکل گریدویو اینه که قسمتی برای اضافه کردن رکورد نداره که با این راه حلی که الان واست میزارم فکر کنم کارت راه بیافته
اول از هم یه گریدویو می سازی و فیلد ها رو توش قرار میدی مثل کد زیر:


<asp:GridView ID="GridView1" runat="server" Width="550px" AutoGenerateColumns="false"
AlternatingRowStyle-BackColor="#C2D69B" HeaderStyle-BackColor="green"
ShowFooter="true" onrowcommand="GridView1_RowCommand" >
<HeaderStyle ForeColor="White" />
<Columns>
<asp:TemplateField HeaderText="article">
<ItemTemplate>
<%# Eval("article")%>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtarticle" runat="server" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="g1">
<ItemTemplate>
<%# Eval("g1")%>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtg1" runat="server" />
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="g2">
<ItemTemplate>
<%# Eval("g2")%>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtg2" runat="server"></asp:TextBox>
</FooterTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
</ItemTemplate>
<FooterTemplate>
<asp:Button ID="btnAdd" runat="server" Text="Add" CommandName = "Footer" OnClick="Add_rc" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<AlternatingRowStyle BackColor="#C2D69B" />

</asp:GridView>


اگه به کد بالا دقت کنی بخش footer گریدویو فعال شده که باعث میشه تا بتونیم دکمه افزودن رکورد جدید که من اینجا اسمش رو btnAdd گذاشتم قرار بگیره، بعد با تگ <FooterTemplate> می تونیم این دکمه رو اضافه کنیم. همینطور انتهای هر فیلدی تکست باکس ها توسط تگ <FooterTemplate> قرار گرفتن تا با اون بشه بعدا اگه خواستیم مقادیر فیلد مورد نظر رو برای رکورد جدید قرار بدیم.
قبل اینکه بریم سراغ کدهای مربوط به دکمه اقزودن رکورد جدید باید مقادیر موجود در جدول رو تویه گریدویو بایند کنیم که تویه قسمت page_load این کارو انجام میدیم اما من این رو تویه یه تابع جداگانه نوشتم و اون تابع رو تویه رویداد لود قرار دادم که به شکل زیر هست:


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

}


کدهای مربوط به تابع AddRecord:

private void AddRecord()
{
string strConnString = SqlDataSource1.ConnectionString;
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(strConnString))
{
string strQuery = "SELECT * FROM tbl_Test";
SqlCommand cmd = new SqlCommand(strQuery);
using (SqlDataAdapter sda = new SqlDataAdapter())
{
cmd.Connection = con;
con.Open();
sda.SelectCommand = cmd;
sda.Fill(dt);
GridView1.DataSource = dt;
GridView1.DataBind();
}
}
}


خب حالا نوبت نوشتن کد مربوط به دکمه btnAdd هست که میشه با اون رکورد جدید رو اضافه کرد:


protected void Add_rc(object sender, EventArgs e)
{
Guid gu = Guid.NewGuid();
TextBox t1 = new TextBox(), t2 = new TextBox(), t3 = new TextBox();
GridViewRow footerRow = GridView1.FooterRow;
t1 = (TextBox)footerRow.FindControl("txtarticle");
t2 = (TextBox)footerRow.FindControl("txtg1");
t3 = (TextBox)footerRow.FindControl("txtg2");
SqlConnection con = new SqlConnection(SqlDataSource1.ConnectionString);
string query =
"INSERT INTO tbl_Test(id,article,g1,g2)" +
"values(@id,@article,@g1,@g2)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@id", gu.ToString());
cmd.Parameters.AddWithValue("@article", t1.Text);
cmd.Parameters.AddWithValue("@g1", t2.Text);
cmd.Parameters.AddWithValue("@g2",t3.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
this.AddRecord();
}


خب فکر کنم یکم نیاز باشه راجع به کارکرد این دکمه یکم توضیح بدم.
ما همه تکست باکس هارو در قسمتی از گریدویو قرار دادیم که بهش می گن footer. پس برای دسترسی بهش باید قسمت footer گریدویو رو فراخوانی کنیم تا با استفاده از تابع findcontrol بتونیم مقادیرش رو استخراج کنیم:

GridViewRow footerRow = GridView1.FooterRow;


خب حالا نوبته اینه که ما بعد پیدا کردن تکست باکس ها اونارو تویه شیئی از نوع تکست باکس قرار بدیم که ما اینجا سه تا شی از نوع تکست باکس تعریف می کنیم و توسط کدهای زیر اونا رو مقدار دهی می کنیم تا بعد بتونیم به عنوان مقادیر پارامتر تویه دستور Insert ازش استفاده کنیم:


TextBox t1 = new TextBox(), t2 = new TextBox(), t3 = new TextBox();
...
t1 = (TextBox)footerRow.FindControl("txtarticle");
t2 = (TextBox)footerRow.FindControl("txtg1");
t3 = (TextBox)footerRow.FindControl("txtg2");



حالا مواد لازم رو جهت افزودن رکورد جدید داریم که من اینجا فیلد کلید رو با شیئی از نوع GUID مقدار دهی کردم. اگه تو نت بگردید راجع بهش اطلاعات کافی رو می تونید بدست بیارید. چون اینجا جاش نیست از توضیحش صرف نظر می کنم.


SqlConnection con = new SqlConnection(SqlDataSource1.ConnectionString);
string query =
"INSERT INTO tbl_Test(id,article,g1,g2)" +
"values(@id,@article,@g1,@g2)";
SqlCommand cmd = new SqlCommand(query, con);
cmd.Parameters.AddWithValue("@id", gu.ToString());
cmd.Parameters.AddWithValue("@article", t1.Text);
cmd.Parameters.AddWithValue("@g1", t2.Text);
cmd.Parameters.AddWithValue("@g2",t3.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();


خب بعد افزودن رکورد جدید دوباره تابع AddRecord رو فراخوانی می کنیم تا بتونیم رکورد جدید رو تویه گریدویو ببینیم

this.AddRecord();


در آخر باید بگم که متاسفانه چنین کدهایی تویه نت یا نبود یا اگه بود باید پولشو می دادین تا بشه ازش استفاده کرد. یه چندتا سایت انگلیسی هم بود که کدهاش خیلی زیاد بودن و آدم باید یه پولی میداد تا یکی ترجمش کنه.
البته نمی دونم شاید من نتونستم آموزش رایگانش رو پیدا کنم.:لبخند:

mamali92
دوشنبه 12 مرداد 1394, 13:38 عصر
فایلی رو که خواسته بودی ضمیمه کردم