PDA

View Full Version : سوال: انتخاب و اضافه کردن بعضی از رکوردهای گرید به یک دیتاسورس جدید



moferferi
سه شنبه 09 آبان 1391, 12:53 عصر
سلام.
من برنامه ای دارم که کاربر میخواد مقادیری را جستجو کنه و در گرید نشون بده و بعد از میان رکوردهای موجود در گرید
بعضی از اون ها را انتخاب کنه و به یک دیتاسورس دیگه اضافه کنه.این کار ممکنه چندین بار انجام بشه.یعنی هر دفعه
مقادیری جستجو بشه و از ایتم های پیدا شده بعضی هاش را انتخاب کنه.
بعد از اتمام جستجو میخوام از رکوردهای موجود در دیتاسورس جدید یک گزارش بگیریم.در حقیقت این دیتاسورس را به فایل کریستال ریپورتم اضافه کنم.
البته با بخش گزارش گیری اون مشکلی ندارم.فقط در بخش اضافه کردن بعضی از رکورد ها به دیتاسورس جدید مشکل دارم
با تشکر

fakhravari
سه شنبه 09 آبان 1391, 15:10 عصر
با سلام
میتونید یک دیتاتیبل استاتیگ بگیرید و نتیجه هر جستجو را درون آن بریزید و در نهایت اون به برنامه بدید

moferferi
پنج شنبه 11 آبان 1391, 09:34 صبح
سلام.
من یه دکمه توی گرید اضافه کردم که با کلیک روی اون ،رکورئ مورد نظر به گری دوم اضافه بشه ولی این خطا را میده

Invalid postback or callback argument. Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page. For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them. If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation.

خاصیت pages enableEventValidation="true"

فعال کردم ولی بازم همین خطا را میده.
این هم کد دکمه گرید
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="AddButton" runat="server" CommandName="AddToCart" CommandArgument="<%# ((GridViewRow) Container).RowIndex %>"
Text="Add to Cart" />
</ItemTemplate>
</asp:TemplateField>
اینم کد کلیک
protected void grid1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "AddToCart")
{

int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = grid1.Rows[index];
}

}

fakhravari
پنج شنبه 11 آبان 1391, 11:52 صبح
این خطا زمانی رخ میدهد که شما دارید یه درخواست میدید و دوباره گرید در پیج لود پر میشه.
باید از ispostback استفاده کنید

moferferi
چهارشنبه 17 آبان 1391, 12:02 عصر
سلام
اقا شرمنده یه مشکل
بعد از کلیک روی دکمه خطای
Input string was not in a correct format.

میده.چرا چیزی توی متغیر index ریختع نمیشه؟
چطوری میشه مفادیر اون رکورد را توی یک دیتاتیبل اضافه کرد

fakhravari
چهارشنبه 17 آبان 1391, 13:09 عصر
با چه کدی میگیری ؟
نمیتونه تبدیل کنه عددی به رشته

moferferi
چهارشنبه 17 آبان 1391, 13:12 عصر
این گرید
<asp:GridView ID="myGridView" runat="server"
onrowcommand="myGridView_RowCommand">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" CommandName="AddARowBelow" Text="Add A Row Below" runat="server" />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
این هم در فرم لود
if (Page.IsPostBack == false)
{
DataTable dt = new DataTable("myTable");
dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Columns.Add("col3");
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(1, 2, 3);
myGridView.DataSource = dt;
myGridView.DataBind();
}
این هم کد کلیک
protected void myGridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "AddARowBelow")
{
int index = Convert.ToInt32(e.CommandArgument);
GridViewRow row = myGridView.Rows[index];

}
}
میخوام بعد از کلیک اون ردیف به رکورد های یک دیتاتیبل دیگه اضافه بشه
ممنون

fakhravari
چهارشنبه 17 آبان 1391, 13:46 عصر
<asp:GridView ID="GridView1" runat="server" onrowcommand="GridView1_RowCommand"
ShowHeader="False" AutoGenerateColumns="False" Width="400px">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="Button1" CommandName="AddARowBelow" runat="server" Text="ADD" /><br />
<asp:Label ID="Label1" runat="server" Text='<%# Eval("col1") %>'></asp:Label><br />
<asp:Label ID="Label2" runat="server" Text='<%# Eval("col2") %>'></asp:Label><br />
<asp:Label ID="Label3" runat="server" Text='<%# Eval("col3") %>'></asp:Label><br />
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
<asp:ListBox ID="ListBox1" runat="server" Height="173px" Width="140px">
</asp:ListBox>





protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ListBox1.Items.Clear();

DataTable dt = new DataTable("myTable");
dt.Columns.Add("col1");
dt.Columns.Add("col2");
dt.Columns.Add("col3");
dt.Rows.Add(1, 2, 3);
dt.Rows.Add(11, 22, 33);
dt.Rows.Add(111, 222, 333);
dt.Rows.Add(1111, 2222, 3333);
dt.Rows.Add(11111, 22222, 33333);

dt.AcceptChanges();

GridView1.DataSource = dt;
GridView1.DataBind();
}
}


protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName == "AddARowBelow")
{

GridViewRow row = (GridViewRow)((Button)e.CommandSource).NamingConta iner;

Label lbl = (Label)row.FindControl("Label1");
Label lb2 = (Label)row.FindControl("Label2");
Label lb3 = (Label)row.FindControl("Label3");

ListBox1.Items.Add(lbl.Text);


}
}

moferferi
چهارشنبه 17 آبان 1391, 14:16 عصر
خیلی ممنون.مشکلم حل شد.:تشویق: