Milad Mohseny
پنج شنبه 20 اسفند 1388, 00:34 صبح
از اساتيدي كه اين روش رو بلدند عذر خواهي ميكنم.
پياده سازي Header CheckBox و Row CheckBox براي GridView
1)
يه Literal آخر صفحه aspx بزارين اگه از master page استفاده ميكنين قبل از اتمام asp:Content
<asp:Literal ID="CheckBoxIDsArray" runat="server"></asp:Literal>
2)
اين TemplateField رو به GridView تون اضافه كنين:
<asp:TemplateField InsertVisible="False">
<HeaderTemplate>
<asp:CheckBox ID="HdChk" runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkRow" runat="server" />
</ItemTemplate>
<ItemStyle />
<HeaderStyle Width="30px" />
</asp:TemplateField>
3)
حالا سمت سرور بايد DataBound مربوط به GridView رو به صوت زير پياده سازي كنيم:
protected void GridView1_DataBound(object sender, EventArgs e)
{
CheckBox cbHeader = GridView1.HeaderRow.FindControl("HdChk") as CheckBox;
cbHeader.Attributes.Add("onclick", "ChangeAllCheckBoxStates(this.checked);");
List<string> ArrayValues = new List<string>();
ArrayValues.Add(String.Concat("'", cbHeader.ClientID, "'"));
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox cb = gvr.FindControl("chkRow") as CheckBox;
cb.Attributes.Add("onclick", "ChangeHeaderAsNeeded();");
ArrayValues.Add(String.Concat("'", cb.ClientID, "'"));
}
CheckBoxIDsArray.Text = "<script type=\"text/javascript\">" +
String.Concat("var CheckBoxIDs = new Array(", String.Join(",", ArrayValues.ToArray()), ");") +
"</script>";
}
4)
حالا سمت كلاينت بايد اين توابع جاوا اسكريپت رو براي تغيير وضعيت checkbox ها قرار بديم:
function ChangeCheckBoxState(id, checkState) {
var cb = document.getElementById(id);
if (cb != null)
cb.checked = checkState;
}
function ChangeAllCheckBoxStates(checkState) {
if (CheckBoxIDs != null) {
for (var i = 0; i < CheckBoxIDs.length; i++)
ChangeCheckBoxState(CheckBoxIDs[i], checkState);
}
}
function ChangeHeaderAsNeeded() {
if (CheckBoxIDs != null) {
for (var i = 1; i < CheckBoxIDs.length; i++) {
var cb = document.getElementById(CheckBoxIDs[i]);
if (!cb.checked) {
ChangeCheckBoxState(CheckBoxIDs[0], false);
return;
}
}
ChangeCheckBoxState(CheckBoxIDs[0], true);
}
}
5)
حالشو ببر
پياده سازي Header CheckBox و Row CheckBox براي GridView
1)
يه Literal آخر صفحه aspx بزارين اگه از master page استفاده ميكنين قبل از اتمام asp:Content
<asp:Literal ID="CheckBoxIDsArray" runat="server"></asp:Literal>
2)
اين TemplateField رو به GridView تون اضافه كنين:
<asp:TemplateField InsertVisible="False">
<HeaderTemplate>
<asp:CheckBox ID="HdChk" runat="server"/>
</HeaderTemplate>
<ItemTemplate>
<asp:CheckBox ID="chkRow" runat="server" />
</ItemTemplate>
<ItemStyle />
<HeaderStyle Width="30px" />
</asp:TemplateField>
3)
حالا سمت سرور بايد DataBound مربوط به GridView رو به صوت زير پياده سازي كنيم:
protected void GridView1_DataBound(object sender, EventArgs e)
{
CheckBox cbHeader = GridView1.HeaderRow.FindControl("HdChk") as CheckBox;
cbHeader.Attributes.Add("onclick", "ChangeAllCheckBoxStates(this.checked);");
List<string> ArrayValues = new List<string>();
ArrayValues.Add(String.Concat("'", cbHeader.ClientID, "'"));
foreach (GridViewRow gvr in GridView1.Rows)
{
CheckBox cb = gvr.FindControl("chkRow") as CheckBox;
cb.Attributes.Add("onclick", "ChangeHeaderAsNeeded();");
ArrayValues.Add(String.Concat("'", cb.ClientID, "'"));
}
CheckBoxIDsArray.Text = "<script type=\"text/javascript\">" +
String.Concat("var CheckBoxIDs = new Array(", String.Join(",", ArrayValues.ToArray()), ");") +
"</script>";
}
4)
حالا سمت كلاينت بايد اين توابع جاوا اسكريپت رو براي تغيير وضعيت checkbox ها قرار بديم:
function ChangeCheckBoxState(id, checkState) {
var cb = document.getElementById(id);
if (cb != null)
cb.checked = checkState;
}
function ChangeAllCheckBoxStates(checkState) {
if (CheckBoxIDs != null) {
for (var i = 0; i < CheckBoxIDs.length; i++)
ChangeCheckBoxState(CheckBoxIDs[i], checkState);
}
}
function ChangeHeaderAsNeeded() {
if (CheckBoxIDs != null) {
for (var i = 1; i < CheckBoxIDs.length; i++) {
var cb = document.getElementById(CheckBoxIDs[i]);
if (!cb.checked) {
ChangeCheckBoxState(CheckBoxIDs[0], false);
return;
}
}
ChangeCheckBoxState(CheckBoxIDs[0], true);
}
}
5)
حالشو ببر