how to use validation on grid view

Ankit tewari
Ankit t...
112 Points
11 Posts

Sir i am using dynamic grid view (inside multiple dropdown)..when i fill all drop dropdown and click add new row then i want to check the user can not insert the same data on dropdown as he had filled on first row..so i have use asp.net validation but they are working only in first row of grid view.. i want to check validation on multiple row on the time of add new row.. sir please suggest me any solution

Views: 12096
Total Answered: 8
Total Marked As Answer: 2
Posted On: 27-Jul-2016 23:51

Share:   fb twitter linkedin
Answers
Ankit tewari
Ankit t...
112 Points
11 Posts
         

sir i am using required field validator .. now i want to stop duplicacy at the time of  add new row click..

<asp:GridView ID="gv_psorder" runat="server" ShowFooter="true" AutoGenerateColumns="False"
Width="95%" OnRowDataBound="gv_psorder_RowDataBound">
<Columns>
<asp:TemplateField ItemStyle-HorizontalAlign="Left">
<HeaderStyle Width="350px" />
<HeaderTemplate>
Item Name <span style="color: red">*</span>
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddl_item_name" runat="server" Width="350px" Height="20px" ValidationGroup="g">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" ValidationGroup="g" ForeColor="Red"
runat="server" ControlToValidate="ddl_item_name" ErrorMessage="Required"></asp:RequiredFieldValidator>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left"></ItemStyle>
</asp:TemplateField>
 
<asp:TemplateField HeaderText="Color" ItemStyle-HorizontalAlign="Left">
<HeaderStyle Width="150px" />
<ItemTemplate>
<asp:DropDownList ID="ddl_color" runat="server" Width="150px">
</asp:DropDownList>
</ItemTemplate>
<ItemStyle HorizontalAlign="Left"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField ItemStyle-HorizontalAlign="Left">
<HeaderStyle Width="150px" />
<HeaderTemplate>
Unit <span style="color: red">*</span>
</HeaderTemplate>
<ItemTemplate>
<asp:DropDownList ID="ddl_unit" runat="server" Width="70px" ValidationGroup="g"></asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" ValidationGroup="g" ForeColor="Red"
runat="server" ControlToValidate="ddl_unit" ErrorMessage="Required"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField ItemStyle-HorizontalAlign="right">
<HeaderStyle Width="70px" />
<HeaderTemplate>
Quantity <span style="color: red">*</span>
</HeaderTemplate>
<ItemTemplate>
<asp:TextBox ID="txt_quantity" runat="server" Width="70px" Style="text-align: right" ValidationGroup="g"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator3" ValidationGroup="g" ForeColor="Red"
runat="server" ControlToValidate="txt_quantity" ErrorMessage="Required"></asp:RequiredFieldValidator>
</ItemTemplate>
</asp:TemplateField>
 
<asp:TemplateField ItemStyle-HorizontalAlign="right">
<ItemTemplate>
<asp:TextBox ID="txt_rate" runat="server" Width="70px" Style="text-align: right" ValidationGroup="g"></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator4" ValidationGroup="g" ForeColor="Red"
runat="server" ControlToValidate="txt_rate" ErrorMessage="Required"></asp:RequiredFieldValidator>
</ItemTemplate>
<HeaderTemplate>
Rate Per Unit <span style="color: red">*</span>
</HeaderTemplate>
<HeaderStyle Width="70px" />
</asp:TemplateField>
<asp:TemplateField ItemStyle-HorizontalAlign="right">
<HeaderStyle Width="180px" />
<ItemTemplate>
<asp:DropDownList ID="ddl_tax_name" runat="server" Width="180px" OnSelectedIndexChanged="ddl_tax_name_SelectedIndexChanged" AutoPostBack="true">
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator5" ValidationGroup="g" ForeColor="Red"
runat="server" ControlToValidate="ddl_tax_name" ErrorMessage="Required"></asp:RequiredFieldValidator>
</ItemTemplate>
<HeaderTemplate>
Tax Name <span style="color: red">*</span>
</HeaderTemplate>
<ItemStyle HorizontalAlign="Left"></ItemStyle>
</asp:TemplateField>
<asp:TemplateField HeaderText="Total Amount" HeaderStyle-Width="90px" ItemStyle-Width="100px" ItemStyle-HorizontalAlign="Right">
<ItemTemplate>
<asp:TextBox ID="txt_total_amount" runat="server" Style="text-align: right" Width="100px" />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnremove" Enabled="true" runat="server" Text="-" OnClick=" btnremove_Click" />
<%-- <asp:LinkButton ID="lbtn" runat="server" OnClick="lbtn_Click" >Remove</asp:LinkButton>--%>
</ItemTemplate>
<FooterStyle HorizontalAlign="Right" />
<FooterTemplate>
<asp:Button ID="btnaddnew" runat="server" Text="+" OnClick="btnaddnew_Click" />
</FooterTemplate>
</asp:TemplateField>
</Columns>
<FooterStyle Font-Bold="True" BorderColor="White" ForeColor="White" HorizontalAlign="Left" />
</asp:GridView> 
 
<asp:Button ID="btu_submit" runat="server" ValidationGroup="g" Text="Submit" OnClick="btu_submit_Click" OnClientClick=" return validate();" />
Posted On: 28-Jul-2016 02:59
Rahul Maurya
Rahul M...
4918 Points
28 Posts
         

Required Field Validator can't check for duplicate. For this you need create custom validation on server side on event btnaddnew_Click. Also please post the btnaddnew_Click event source code so that we can suggest the logic for this.

Posted On: 28-Jul-2016 04:03
Ankit tewari
Ankit t...
112 Points
11 Posts
         
private void AddNewRowToGrid()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
DropDownList ddl_item_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_item_name");
TextBox txt_quantity = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_quantity");
TextBox txt_rate = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_rate");
TextBox txt_taxper = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_taxper");
TextBox txt_tax_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_tax_amount");
TextBox txt_lot_qty = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_lot_qty");
DropDownList ddl_sale_ledger = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_sale_ledger");
TextBox txt_total_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_total_amount");
DropDownList ddl_color = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_color");
DropDownList ddl_unit = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_unit");
DropDownList ddl_tax_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_tax_name");
Button btn_add = (Button)gv_sale_entry.FooterRow.FindControl("btnaddnew");
btn_add.Enabled = false;
drCurrentRow = dtCurrentTable.NewRow();
dtCurrentTable.Rows[i - 1]["Column1"] = ddl_sale_ledger.Text;
dtCurrentTable.Rows[i - 1]["Column2"] = ddl_item_name.Text;
dtCurrentTable.Rows[i - 1]["Column3"] = ddl_color.Text;
dtCurrentTable.Rows[i - 1]["Column4"] = ddl_unit.Text;
dtCurrentTable.Rows[i - 1]["Column5"] = txt_lot_qty.Text;
dtCurrentTable.Rows[i - 1]["Column6"] = txt_quantity.Text;
dtCurrentTable.Rows[i - 1]["Column7"] = txt_rate.Text;
dtCurrentTable.Rows[i - 1]["Column8"] = ddl_tax_name.Text;
dtCurrentTable.Rows[i - 1]["Column9"] = txt_taxper.Text;
dtCurrentTable.Rows[i - 1]["Column10"] = txt_tax_amount.Text;
dtCurrentTable.Rows[i - 1]["Column11"] = txt_total_amount.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
gv_sale_entry.DataSource = dtCurrentTable;
gv_sale_entry.DataBind();
int r_count = gv_sale_entry.Rows.Count;
}
}
else
{
Response.Write("ViewState is null");
}
 
//Set Previous Data on Postbacks
SetPreviousData();
}

 

Posted On: 28-Jul-2016 23:04
Rahul Maurya
Rahul M...
4918 Points
28 Posts
         

Source code is not complete. please send all source code (btnaddnew_Click and SetPreviousData()).

Posted On: 29-Jul-2016 01:48
Ankit tewari
Ankit t...
112 Points
11 Posts
         
protected void Page_Load(object sender, EventArgs e)
{
}
private void SetInitialRow()
{
DataTable dt = new DataTable();
DataRow dr = null;
dt.Columns.Add(new DataColumn("Column1", typeof(string)));
dt.Columns.Add(new DataColumn("Column2", typeof(string)));
dt.Columns.Add(new DataColumn("Column3", typeof(string)));
dt.Columns.Add(new DataColumn("Column4", typeof(string)));
dt.Columns.Add(new DataColumn("Column5", typeof(string)));
dt.Columns.Add(new DataColumn("Column6", typeof(string)));
dt.Columns.Add(new DataColumn("Column7", typeof(string)));
dt.Columns.Add(new DataColumn("Column8", typeof(string)));
dt.Columns.Add(new DataColumn("Column9", typeof(string)));
dt.Columns.Add(new DataColumn("Column10", typeof(string)));
dt.Columns.Add(new DataColumn("Column11", typeof(string)));
dr = dt.NewRow();
dr["Column1"] = string.Empty;
dr["Column2"] = string.Empty;
dr["Column3"] = string.Empty;
dr["Column4"] = string.Empty;
dr["Column5"] = string.Empty;
dr["Column6"] = string.Empty;
dr["Column7"] = string.Empty;
dr["Column8"] = string.Empty;
dr["Column9"] = string.Empty;
dr["Column10"] = string.Empty;
dr["Column11"] = string.Empty;
dt.Rows.Add(dr);
//Store the DataTable in ViewState
ViewState["CurrentTable"] = dt;
gv_sale_entry.DataSource = dt;
gv_sale_entry.DataBind();
}
protected void btnremove_Click(object sender, EventArgs e)
{
Button btn = (Button)sender;
GridViewRow gvRow = (GridViewRow)btn.NamingContainer;
int rowID = gvRow.RowIndex;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 1)
{
if (gvRow.RowIndex <= dt.Rows.Count - 1)
{
//Remove the Selected Row data and reset row number
dt.Rows.Remove(dt.Rows[rowID]);
ResetRowID(dt);
}
}
ViewState["CurrentTable"] = dt;
//Re bind the GridView for the updated data
gv_sale_entry.DataSource = dt;
gv_sale_entry.DataBind();
}
//Set Previous Data on Postbacks
SetPreviousData();
}
 
private void AddNewRowToGrid()
{
int rowIndex = 0;
 
 
if (ViewState["CurrentTable"] != null)
{
DataTable dtCurrentTable = (DataTable)ViewState["CurrentTable"];
DataRow drCurrentRow = null;
if (dtCurrentTable.Rows.Count > 0)
{
for (int i = 1; i <= dtCurrentTable.Rows.Count; i++)
{
//extract the TextBox values
DropDownList ddl_item_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_item_name");
TextBox txt_quantity = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_quantity");
TextBox txt_rate = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_rate");
TextBox txt_taxper = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_taxper");
TextBox txt_tax_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_tax_amount");
TextBox txt_lot_qty = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_lot_qty");
DropDownList ddl_sale_ledger = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_sale_ledger");
TextBox txt_total_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_total_amount");
DropDownList ddl_color = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_color");
DropDownList ddl_unit = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_unit");
DropDownList ddl_tax_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_tax_name");
Button btn_add = (Button)gv_sale_entry.FooterRow.FindControl("btnaddnew");
btn_add.Enabled = false;
drCurrentRow = dtCurrentTable.NewRow();
dtCurrentTable.Rows[i - 1]["Column1"] = ddl_sale_ledger.Text;
dtCurrentTable.Rows[i - 1]["Column2"] = ddl_item_name.Text;
dtCurrentTable.Rows[i - 1]["Column3"] = ddl_color.Text;
dtCurrentTable.Rows[i - 1]["Column4"] = ddl_unit.Text;
dtCurrentTable.Rows[i - 1]["Column5"] = txt_lot_qty.Text;
dtCurrentTable.Rows[i - 1]["Column6"] = txt_quantity.Text;
dtCurrentTable.Rows[i - 1]["Column7"] = txt_rate.Text;
dtCurrentTable.Rows[i - 1]["Column8"] = ddl_tax_name.Text;
dtCurrentTable.Rows[i - 1]["Column9"] = txt_taxper.Text;
dtCurrentTable.Rows[i - 1]["Column10"] = txt_tax_amount.Text;
dtCurrentTable.Rows[i - 1]["Column11"] = txt_total_amount.Text;
rowIndex++;
}
dtCurrentTable.Rows.Add(drCurrentRow);
ViewState["CurrentTable"] = dtCurrentTable;
gv_sale_entry.DataSource = dtCurrentTable;
gv_sale_entry.DataBind();
int r_count = gv_sale_entry.Rows.Count;
}
}
else
{
Response.Write("ViewState is null");
}
objsaleentry.item_type = Convert.ToString(ddl_itemtype.SelectedItem.Text);
for (int i = 0; i < gv_sale_entry.Rows.Count; i++)
{
ddl_item_name = (DropDownList)gv_sale_entry.Rows[i].Cells[0].FindControl("ddl_item_name");
Comman.FillListControl(ddl_item_name, objsaleentry.BindItemBrand(objsaleentry), "item_id", "item_name");
//ddl_item_name.Items.Insert(0, new ListItem("Select ", "0"));
}
//Set Previous Data on Postbacks
SetPreviousData();
}
 
private void SetPreviousData()
{
int rowIndex = 0;
if (ViewState["CurrentTable"] != null)
{
DataTable dt = (DataTable)ViewState["CurrentTable"];
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
DropDownList ddl_item_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_item_name");
TextBox txt_quantity = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_quantity");
TextBox txt_rate = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_rate");
TextBox txt_taxper = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_taxper");
TextBox txt_tax_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_tax_amount");
TextBox txt_lot_qty = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_lot_qty");
TextBox txt_total_amount = (TextBox)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("txt_total_amount");
DropDownList ddl_color = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_color");
DropDownList ddl_unit = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_unit");
DropDownList ddl_tax_name = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_tax_name");
DropDownList ddl_sale_ledger = (DropDownList)gv_sale_entry.Rows[rowIndex].Cells[1].FindControl("ddl_sale_ledger");
ddl_sale_ledger.Text = dt.Rows[i]["Column1"].ToString();
ddl_item_name.Text = dt.Rows[i]["Column2"].ToString();
ddl_color.Text = dt.Rows[i]["Column3"].ToString();
ddl_unit.Text = dt.Rows[i]["Column4"].ToString();
txt_lot_qty.Text = dt.Rows[i]["Column5"].ToString();
txt_quantity.Text = dt.Rows[i]["Column6"].ToString();
txt_rate.Text = dt.Rows[i]["Column7"].ToString();
ddl_tax_name.Text = dt.Rows[i]["Column8"].ToString();
txt_taxper.Text = dt.Rows[i]["Column9"].ToString();
//ddl_taxtype.Text = dt.Rows[i]["Column8"].ToString();
txt_tax_amount.Text = dt.Rows[i]["Column10"].ToString();
txt_total_amount.Text = dt.Rows[i]["Column11"].ToString();
rowIndex++;
}
}
}
}
private void ResetRowID(DataTable dt)
{
int rowNumber = 0;
if (dt.Rows.Count > 0)
{
foreach (DataRow row in dt.Rows)
{
row[0] = rowNumber;
rowNumber++;
}
}
}
protected void btnaddnew_Click(object sender, EventArgs e)
{
AddNewRowToGrid();
}
 

 

Posted On: 29-Jul-2016 03:07
Rahul Maurya
Rahul M...
4918 Points
28 Posts
         

Modified btnaddnew_Click event as:

protected void btnaddnew_Click(object sender, EventArgs e)
{
if (IsAllUnique())
{
AddNewRowToGrid();
}
else
{
//print the message row is duplicate in some level
}
}
public bool IsAllUnique()
{
int Count = 0;
for (int i = 0; i <= gv_sale_entry.Rows.Count - 2; i++)
{
for (int a = i + 1; a <= gv_sale_entry.Rows.Count - 1; a++)
{
DropDownList ddl_item_name = (DropDownList)gv_sale_entry.Rows[i].Cells[1].FindControl("ddl_item_name");
DropDownList ddl_item_name1 = (DropDownList)gv_sale_entry.Rows[a].Cells[1].FindControl("ddl_item_name");
TextBox txt_quantity = (TextBox)gv_sale_entry.Rows[i].Cells[2].FindControl("txt_quantity");
TextBox txt_quantity1 = (TextBox)gv_sale_entry.Rows[a].Cells[2].FindControl("txt_quantity");
if (ddl_item_name.SelectedItem.Value == ddl_item_name1.SelectedItem.Value && txt_quantity.Text== txt_quantity1.Text)
Count += 1;
}
}
if (Count > 0)
{
return false;
}else
{
return true;
}
}

 

In I check two dropdown itemname and quantity. you can add more.

Posted On: 29-Jul-2016 04:55
Ankit tewari
Ankit t...
112 Points
11 Posts
         

thank you so much sir...i use this code ..and it worked... sir now   i want to use java script validation instead of asp validation on time of add new row click  ... ??   please send me a small function of javascript validation...

Posted On: 01-Aug-2016 05:02
Rahul Maurya
Rahul M...
4918 Points
28 Posts
         

Hi Ankit,

Use following JavaScript method on client site to validate duplicate row:

<script>
function IsAllUnique() {
var table, tbody, i, rowLen, row, j, colLen, cell;
var Count = 0;
table = document.getElementById("gv_sale_entry");
tbody = table.tBodies[0];
for (i = 0, rowLen = tbody.rows.length; i < rowLen - 1; i++) {
row = tbody.rows[i];
for (j = i + 1, colLen = tbody.rows.length; j < colLen; j++) {
var row1 = tbody.rows[j];
var ddl_item_name = row.cells[1].getElementsByTagName("select")[0];
var ddl_item_name1 = row1.cells[1].getElementsByTagName("select")[0];
var txt_quantity = row.cells[2].getElementsByTagName("input")[0];
var txt_quantity = row1.cells[2].getElementsByTagName("input")[0];
if (ddl_item_name.value == ddl_item_name1.value && txt_quantity.value == txt_quantity1.value) {
Count += 1;
}
}
}
if (Count > 0) {
return false;
} else {
return true;
}
}
</script>

 

And you can call it in Validate method as:

<script>
function validate() {
if (!IsAllUnique) {
//print in label row is duplicate!
return false;
}
}
</script>
Posted On: 01-Aug-2016 05:27
 Log In to Chat